黑马程序员java培训就业班笔记:集合体系总结
java集合总结

java集合总结篇一:Java集合类总结2 Java中集合类用法总结Collection ├List │├LinkedList │├ArrayList (异步,线程不安全,空间用完时自动增长原容量一半)│└Vector (同步,线程安全,空间用完时自动增长原容量一倍)│ └Stack └Set ├HashSet └TreeSet Map ├Hashtable ├HashMap ├WeakHashMap └TreeMap Map接口:| + -- WeakHashMap: 以弱键实现的基于哈希表的Map。
在WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。
更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。
丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的Map 实现有所不同。
此实现不是同步的。
| + -- TreeMap:该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator 进行排序,具体取决于使用的构造方法。
此实现不是同步的。
| + -- HashMap:基于哈希表的Map 接口的实现。
此实现提供所有可选的映射操作,并允许使用null 值和null 键。
(除了非同步和允许使用null 之外,HashMap 类与Hashtable 大致相同。
)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
此实现不是同步的。
| +-- Sorted Map: 进一步提供关于键的总体排序的Map。
该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的Comparator 进行排序。
对有序映射的collection 视图(由entry Set、keyset 和values 方法返回)进行迭代时,此顺序就会反映出来。
要采用此排序方式,还需要提供一些其他操作(此接口是Sorted Set 的对应射)。
黑马程序员java培训就业班笔记:day18(泛型、Map集合)总结

Day18总结1、泛型类:在写容器之前想要容器中要存什么?所以要先写好泛型Eg:TreeSet<Person> ts=new TreeSet<Person>();有了泛型后强制转换就没有用Eg:public class Person implements Comparator<Person>{}对于下面覆盖的它的compare方法就不用强制转换了。
Public int compare(Person p){}这里就不用在做强制转换了。
实现代码:Public static void main(String[] args){Tool t=new Tool();t.setObject(new Cat());t.setObject(new Dog());这时编译会出现没问题,但是运行时会出现错误,因为发生了类型转换异常,dog不能转换成Cat。
Cat c=(Cat)t.getObject();Tool<Cat> t=new Tool<Cat>();t.setObject(new Cat());此时就不用强转了t.setObject(new Dog()):此时编译就失败,把运行时的异常转到编译时候。
}Class Cat{}Class Dog{}/*Class Tool{Private Object obj;Public void setObject(Object obj){This.obj=obj;}Public Object getObject(){Return obj;}}*/改进后Class Tool<T>{Private T t;Public void setObject(T t){This.t=t;}Public T getObject(){Return t;}}总结:这就是将泛型定义在类上,这个类称为泛型类,是一种替代Object类的一种技术,因为Object类有自动类型提升和转换,泛型已经替代它做了,编译时期更安全,省去了强转的麻烦。
黑马程序员java培训就业班笔记:day03总结

Day03知识总结:上午:1、逻辑运算符:就是指的是一种关系,作用:用于连接两个布尔类型的表达式包括以下几种:&:与,特点:两边为真才为真,一边为假则为假| 或,特点:一边为真则为真,两边为假才为假! 非,特点:非真为假,非假为真^ 异或特点:同为假,异为真规律:一个数同时异或这个数两次结果还是这个数。
用于加密&& 双与特点:与&一样,但是有点小区别,在下面单独讨论。
|| 双或特点:与|一样,但是有点小区别,在下面单独讨论。
<<:左移规律:左移几位就是该数乘以2的几次方,>>:右移:规律:右移几位就是除以2的几次方注意对于左移和右移中高位的问题,总结为一句话:简单一句话:最高是什么就拿什么补,高位为0就拿0补,高位为1就拿1补;>>>:无符号右移:区别于>>就是高位出现的空位,无论高位原来是什么都用0补;2、&与&&的区别:共同点:二者都可以作为逻辑与的运算符,表示逻辑与,不同点:&&有短路的功能,如果第一个表达式为false时,不需要进行第二个表达式的运算,当&操作符两边的表达式不是boolean类型时,表示按位与操作。
Eg:我们通常使用0x0f来与一个整数进行&运算,获取低四位;3、|和||的区别:|:无论左边的运算结果是什么,右边都参与运算。
||:当左边为真时,右边不参与运算的。
4、练习题:1、最有效率的方式算出2乘以8等于几?2*8:在内存中的运算0010* 1000------0000000000000010-------0010000=16;想要运算变的高效首先2进制位;00000000000000000000000000000010 2--左移三位2、对两个整数变量进行互换;不定义三方变量;(用三种方式)int a=3,b=5;a=a+b;//a=3+5; a=8b=a-b;//b=3+5-5;b=3a=a-b;//a=3+5-3;a=5这种方法不建议用,如果两个整数的数值过大,会超出Int范围,会强制转换,数据会变化a=a^b;//a=3^5b=a^b;//b=(3^5)^5;b=3a=a^b;//a=(3^5)^3;a=5以上方式用于面试第三方变量:int cc=a;a=b;b=c;实际开发中用此种方式;3、对于一个整数的最后一个字节,高四位和低四位进行换位;(画出图)思路:1、首先用该数与1进行与保证唯一的有效位;0000-0000 0000-0000 0000-0000 1011-01100000-0000 0000-0000 0000-0000 1111-1111----------------------------------------0000-0000 0000-0000 0000-0000 1011-0110再用得到的与&15进行与运算0101 1100& 1111----低位b:0000 1100用位运算&15取出低四位;0101 1100&1111 0000 0x0f<<4;----------0101 0000高位c: 0101 0000低位右移4位c>>4;高位左移4位b<<4;最后或运算保留有效位c|b;int a,b(低位),c(高位);a=a&0xFF;b=a&0x0f;c=a&(0xof<<4);b=b<<4;c=c>>>4;a=b|c;用在加密解密当中;5、三元运算符:特点:只要是运算符就得有结果。
黑马程序员_javaweb讲义和笔记资料

黑马程序员_javaweb讲义和笔记资料一、简介黑马程序员是一家专业的IT培训机构,提供全面的编程技术培训服务。
javaweb是其中的一门重要课程,本文为黑马程序员_javaweb讲义和笔记的资料整理。
二、javaweb基础知识1. Java语言概述Java语言的特点和优势,Java开发环境的搭建等。
2. Servlet技术Servlet的基本概念、生命周期、Servlet容器等。
3. JSP技术JSP的基本语法、JSP指令、JSP内置对象等。
4. MVC设计模式MVC设计模式在javaweb开发中的应用和实践。
三、javaweb开发流程1. 需求分析分析项目需求,明确开发目标和功能要求。
2. 数据库设计设计数据库表结构,确定数据存储方式和关系。
3. 技术选型根据项目需求和开发要求,选择合适的技术框架和工具。
4. 编码实现使用Java语言和相关技术进行编码实现。
5. 测试调试运行和调试项目,确保功能的正确性和稳定性。
6. 部署上线将项目部署到服务器上线,提供给用户访问和使用。
四、javaweb开发常用框架和工具1. Spring框架Spring框架的介绍和核心特性,以及在javaweb开发中的应用。
2. SpringMVC框架SpringMVC框架的详细讲解,包括请求映射、数据绑定、视图解析等。
3. MyBatis框架MyBatis框架的使用方法和技巧,以及与数据库的集成。
4. Maven工具Maven的基本使用和配置,常用插件介绍。
五、javaweb开发中的常见问题和解决方案1. 数据库连接异常分析数据库连接异常的原因和解决方法。
2. 页面跳转问题页面跳转的实现方式和常见错误排查。
3. 表单数据验证表单数据验证的常用技术和插件,提高数据输入的准确性和安全性。
4. 性能优化优化javaweb应用的性能,减少响应时间和资源占用。
六、实例项目提供一个实例项目,通过对该项目的讲解和分析,帮助学员理解和掌握javaweb开发的方法和技巧。
黑马程序员——集合框架

黑马程序员——集合框架集合:有时也被称作容器,是对象的持有者,它们可以以有助于高效访问的方式来储存和组织对象。
集合框架继承关系:-----------------------------------------------------------------------------------------------------------------------------------------Collection<E>:是集合框架的根接口。
所有的集合都继承Collection。
其中定义了集合中常用的方法,如add、remove、size、toArray、Iterator等。
List<E>:集合特点有序,元素可以重复。
继承了Collection,增添了许多有关索引的方法。
特有方法。
凡是可以操作角标的方法都是该体系特有的方法。
增add(index,element);addAll(index,Collection);删remove(index);改set(index,element);查get(index):subList(from,to);listIterator();int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();ArrayList<E>:底层的数据结构使用的是数组结构。
特点:查询速度很快。
但是增删稍慢。
线程不同步。
是一个不错的基本列表实现,它将其元素存放在一个数组中。
它有一个容量,它表示在不需要为更大的数组分配内存的情况下所能容纳的元素数量。
当空间用尽时,就必须重新分配一个数组以替代原数组。
所以正确地设置初始容量可以提高性能。
如果数据的初始大小远远小于最终的大小,那么可以将初始容量设置的更大一点。
减少使用更大数组替代原数组的次数。
但是如果定义的太大又浪费空间。
ArrayList构造器:public ArrayList():使用默认容量创建一个新的ArrayList集合;public ArrayList(int a):定义一个新的ArrayList集合,不用改变就可以存放a个元素;public ArrayList(Collection<? extends E> coll):创建一个新的ArrayList集合,它的初始内容就是coll的内容。
黑马程序员ava知识总结

一、黑马程序员—java概述与基础知识 61、何为编程? 62、Java语言概述,历史、特点63、什么是跨平台性?原理是什么?JVM 64、Jre和Jdk的区别? 75、java虚拟机JVM 76、Java程序运行机制77、学习java注意的地方78、Java语法格式89、代码注释:单行//,多行/* */,文档注释/** */ 810、Java中的标识符811、java中的常量和变量812、Java成员变量和局部变量914、基本数据类型转换之向上转型和向下转换1115、Java的运算符1116、表达式和三目运算符1217、程序流程控制1218、三大循环结构: 1419、嵌套循环与流程控制17二、黑马程序员—方法与数组181、什么是方法(Method)?182、Java中方法的格式:193、方法里的属性194、方法特点195、什么是方法的重载(Overload)?206、可变参数217、数组简介:228、一维数组的声明与初始化:229、数组的使用:2310、分配内存空间2411、二维数组:2512、操作数组的工具类-Arrays 2613、Java5新特性对数组的支持:27三、黑马程序员—面向对象(1)271、什么叫面向对象?272、类283、构造方法284、static关键字305、匿名对象316、this关键字317、面向对象之封装318、访问修饰符329、类的设计分析3210、面向对象之继承3311、子类访问父类和方法覆写3412、super关键字和调用父类构造方法3413、面向对象之多态3514、引用变量类型转换37四、黑马程序员—面向对象(2)381、基本数据类型的包装类382、基本数据类型和包装类相互转换383、基本类型和String之间的转换394、Object类395、代码块406、构造方法的私有化427、Singleton模式(单例模式) 饿汉式和懒汉式428、final 关键字449、抽象类4510、抽象类的体现-模板模式4711、接口(interface) 4812、接口的使用5013、面向接口编程之制定标准和简单工厂模式5014、面向接口编程之适配器模式5215、接口和抽象类的比较5316、匿名内部类5417、枚举类54五、黑马程序员—异常处理和常用类571、异常572、异常处理格式573、多异常处理584、异常的分类595、声明异常(throws)606、throw 608、throw和catch同时使用 619、常用类6210、String方法6411、StringBuffer 与StringBuilder 6612、Math和Random和UUID 6913、Date和Calendar 7014、System 74六、黑马程序员—线程技术741、进程和线程752、创建线程方式753、两种进程创建方式比较774、线程的生命周期785、控制线程796、多线程安全问题817、多线程安全问题的解决方法828、线程通信86七、黑马程序员—集合框架(1)891、集合类&容器892、Collection接口 903、Iterator接口914、集合遍历输出方式916、TreeSet 957、List接口998、List接口中常用类1019、Map接口104八、黑马程序员—集合框架(2)1071、Collections类1072、Arrays 1093、泛型(Generic) 1094、泛型的使用1105、声明多个泛型类型和通配符1146、泛型的上限与下限1157、泛型接口和方法1178、泛型的嵌套(map例子)118九、黑马程序员—IO操作(1) 1191、IO的概述和File方法1192、递归(Recursion) 1203、文件过滤器java.io.FilenameFilter 1224、流1235、操作流的步骤(重点)1246、字节流和字符流1257、文件拷贝1278、字节→字符转换流1299、自动关闭资源的try语句130十、IO文件操作(2) 1311、内存操作流1312、打印流1333、格式化输出1344、标准流1355、Scanner(简单文本扫描器) 1376、缓冲流1397、合并流(SequenceInputStream)140 十一、黑马程序员—网络编程1411、什么是网络编程?1412、网络通讯要素1423、TCP和UDP的联系和用途1424、InetAddress与Socket 1435、UDP传输1446、TCP传输1488、小例子154十二、黑马程序员—反射机制1561、反射的概念1562、获得Class对象1583、九个预定义Class对象1594、利用Class获取类的属性信息1605、Class中得到构造方法Constructor、方法Method、字段Field 1616、利用反射创建对象1667、使用反射调用方法1698、使用反射调用可变参数方法1709、使用反射操作字段17110、反射和泛型-反射来获取泛型信息173十三、黑马程序员—反射机制1751、GUI(图形用户界面) 1752、布局管理器1763、事件监听机制组成1774、Dialog 1845、菜单1871、Eclipse的使用技巧1912、静态导入(1.5特性,好处是不用写类名)1923、可变参数1935、基本数据类型的自动拆箱与装箱1946、枚举1947、反射实现框架功能1961、内省 了解JavaBean 1982、内省综合案例和Beanutils工具包 1983、注解(Annotation)2014、泛型2041、类加载器2082、类加载器的委托机制2083、一个类加载器的高级问题分析2124、代理的概念与作用2125、动态代理技术2146、分析JVM动态生成的类 2148、实现类似spring的可配置的AOP框架 220黑马程序员——面试题之交通灯管理系统 2241、面向对象的分析与设计2252、Road类的编写 2263、Lamp类的编写2274、LampController类的编写2305、MainClass类的编写 230黑马程序员——面试题之银行业务系统2321、需求2322、需求分析2333、NumberManager类 2334、NumberMachine类2345、CustomerType枚举类2356、ServiceWindow类2357、MainClass类与Constants类238一、黑马程序员—java概述与基础知识1、何为编程?编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。
黑马程序员java培训就业班笔记:day11总结

Day11知识总结:1、异常处理细节:1、定义功能时,功能中有什么问题,都应该进行预先的处理比如try catch.如果处理不了,应该通过throws声明抛出,让调用者进行处理。
2、调用了抛出异常的功能的函数,应该进行处理,如果使用try catch处理的话,被调用的功能上抛出几个异常,就应该对应几个catch语句,必须要对多个异常进行针对性的处理。
3、如果出现多个catch中存在着父类异常的catch,那么这个catch一定放在catch的最后,通常这种情况在面试很多见。
4、如果函数内抛出异常,那么一定要在函数上声明,否则编译失败,但是要注意函数内抛出的异常是运行时异常(RuntimeException),那么函数上是可以不用throws声明的。
5、如果函数内抛出了异常,进行了本功能内部的处理,但是处理的并不完全,这时应该在异常处理中,继续将异常抛出,让在函数上声明让调用者知道问题的存在,但是有可能需要将异常进行转换,尽量抛出调用者识别的异常,处理起来更方便。
6、当子类覆盖父类中的异常声明的方法时,子类方法只能声明父类的异常或者该异常的子类。
如果父类抛出了多个异常,那么子类在覆盖时买智能抛出父类异常的子集。
7、如果父类和接口中的方法没有声明抛出过异常,那么子类的覆盖父类方法时,也不能抛出异常,如果子类中的方法发生了异常,那么子类只能try catch不能用throws声明,只能try,不能抛,如果非要在函数内抛出异常,那么只能抛出RuntimeException,因为这种异常不用在函数声明上。
2、finally:定义一定会被执行的代码。
通常用来关闭资源,异常处理的三种格式:1、try catch finally2、Try catch//可以多个catch3、Try finally记住:catch是用于处理异常的,如果没有catch就代表异常没有被处理过,如故哦该异常是检测时异常,必须被声明。
代码体现:3、异常总结:异常是什么?是对问题的描述,将问题进行对象的封装。
黑马程序员java培训就业班笔记day17(集合框架set)总结

Day17总结1、LinkedList:特有方法:1、增加:addFirst()addLast()JDk1.6之后出现了替代方法Boolean offerFirst()Boolean offerLast()实现代码:Public static void main(String[] args){LinkedLis link=new LinkedList();Link.addFirst("abc1");Link.addFirst("abc2");Link.addFirst("abc3");Link.addFirst("abc4");While(!link.isEmpty()){//此方法可以按照顺序取出元素,但是被删除,可以去模拟一些简单的数据结构Sop(link.removeLast());//abc1、abc2、abc3、abc4}}重点:模拟堆栈、队列这两种常见的数据结构;实现代码:队列:先进先出Public static void main(String[] args){DuiLie d=new DuiLie();d.myAdd("abc1");d.myAdd("abc2");d.myAdd("abc3");While(!d.isNull()){//判断是否有元素Sop(d.myGet());}}Class DuiLie{Private LinkedList link;DuiLie(){Link=new LinkedList();}提供添加元素的方法Public void myAdd(Object obj){link.addFirst(obj);//这里修改为link.addLast()就是堆栈}提供获取元素的方法Public Object myGet(){Return link.removeLast();}判断集合中是否有内容Public boolean isNull(){Return link.isEmpty();}}2、获取:Object getFirst()获取对象,不删除,如果集合中没有元素会抛出NoSuchElementException;Object getLast();JDK1.6后Object peekFirst()Object peeklast()3、获取对象:Object removeFirst()获取到元素,但是删除了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、Collection:集合框架的由来:因为每个容器对象的自身的数据结构不同,所以对它们进行单独的描述和对象封装,并不断的向上抽取共性内容,这样变形成了集合框架。
定义:集合就是一个容器、用来存储对象、长度可变。
理解:其实班级就是一个容器,班上的每一个学生都是单独封装了功能的对象,因为班级中的人数由于有人请假每天都再变化,所以长度是可变的,常见方法:1、增加:add();增加一个元素addAll();增加一部分元素。
2、删除:Remove();删除一个元素,会返回boolean类型,其实用到是equals方法,所以判断是否有符合要求的元素。
如果删除成功会改变集合的长度。
下面同理。
removeAll();删除全部Clrea();清空容器总结:在这里要尤其注意,面试题中经常考到。
3、判断:Contains();是否包含,也就说要所有的都包含在其中才算包含,否则不算包含。
isEmpty();集合是否为空Size();集合长度。
4、取:retainAll();取交集。
理解总结:班级就是一个容器,班级中进来一位新生就是Add()添加一个元素,来了一堆同学就是addAll,班上出去一个学生就是remove删除一个,出去一部分就是removeAll删除一部分,班级是不是有人,isEmpty,班上是否包含张三contains,班上有多少人size。
班上是否包含隔壁班的同学retainAll.去交集。
集合使用细节:1、直接存储基本数据类型值也是可以的,因为JDK1.5后有自动装箱,会将基本数据类型转成对象,JDK1.4绝对不行。
Eg:coll.add(3)2、集合对象中存储的其实是对象的元素的引用。
3、Add的参数是Object类型,可以接收所有的类型的对象,会出现向上转型,取出元素时类型还是Object不能使用具体对象的特有内容,想要使用特有内容向下转型。
Eg:Object obj="obj";想要取出访问子类的特有方法,向下转型,String s=(String)it.next();sop(s.length());|--List:有序列表(存取顺序是一致的)因为该子体系元素中有索引或角标,可以存储重复的元素。
常用方法://添加:List.add(1,"abc7");//[abc1,abc7,abc2,abc3]在角标1位置往后顺延。
//删除Object obj=list.remove(2);//删除指定索引上的元素,根据角标删除会返回来被删对象Sop(obj);//obj:abc2 [abc1,abc7,abc3]//获取:获取指定角标上的元素并返回,这也是和remove的区别。
Object obj=list.get(1);Sop(obj);//obj:abc1 [abc1,abc7,abc3]//获取元素的索引,如果元素存在返回索引,不存在返回-1,依次还可以判断元素是否存在。
Int index=list.indexOf("abc1");Sop(index);//index=1//获取指定的子列表sublist(fromIndex,toindex)包含头不包含尾List=list.sublist(1,2);//[abc1]//修改:Object obj=list.set(1,"haha");Sop(obj);//[abc1,haha,abc3]记住:只有list集合支持增删改查。
|--ArrayList:低层是数组数据结构,不同步,查询快,增删慢,|--LinkedList:低层是链表数据结构,不同步,查询慢,增删较快。
|--Vector:低层是数组数据结构,同步,安全效率低,还有其特有方法枚举。
由于名称过长被iterator取代。
总结:掌握这些集合的方法,它们的方法和list集合的方法很相似,重点掌握各种集合的特点,尤其是前两个子类的低层数据结构。
|--Set无序、不能存储重复的元素、方法个collection集合的方法一致。
|--HashSet低层是哈希表数据结构,无序,能保证元素的唯一性,是根据元素的两个方法来保证元素的唯一性的,hasCode和equals方法。
只有当hasCode算出的哈希值相同的情况下才去判断equals方法是否为true.如果为真说明两个元素相同,不存储,所以往hashSet 集合中存储自定义对象时要覆写hasCode方法和equals方法,重点掌握上述保证唯一性的方法以及哈希表内存原理实现。
|--linkedHashSet以元素的插入顺序来维护集合的连接表,允许以插入的顺序的集合中迭代的怎么去理解?HashSet<String> hs=new HashSet<String>();hs.add("B");hs.add("A");hs.add("D");hs.add("E");hs.add("C");hs.add("F");System.out.println("HashSet:"+hs);LinkedHashSet<String> lhs=newLinkedHashSet<String>();lhs.add("B");lhs.add("A");lhs.add("D");lhs.add("E");lhs.add("C");lhs.add("F");System.out.println("LinkedHashSet:"+lhs);TreeSet<String> ts=new TreeSet<String>();ts.add("B");ts.add("A");ts.add("D");ts.add("E");ts.add("C");ts.add("F");System.out.println("TreeSet:"+ts);结果:HashSet:[D, E, F, A, B, C]LinkedHashSet:[B, A, D, E, C, F]TreeSet:[A, B, C, D, E, F]从结果可以知道对于LinkedHashSet集合可以保证元素按照添加的顺序取出元素,而TreeSet集合可以对集合中的元素进行自然排序。
|--TreeSet用于给set集合中元素按照指定的顺序进行排序,低层是二叉树结构,线程是不同步的,两种排序方式:1、让元素自身具备比较功能,就是强制让元素去实现comparable接口,覆盖compareTo方法。
这时元素具备的自然排序。
可是如果元素自身不具备比较的功能,获取具备的比较功能不是所需要的。
这时该排序方式就不能用了。
2、让集合自身具备比较功能,需要定义比较器,其实就是将实现了Comparator接口的子类对象作为参数传递给TreeSet集合的构造函数,让treeSet集合一创建就具备了比较功能。
该子类必须要覆盖compare方法。
掌握二叉树数据结构的特点:不明白?2、Map:特点:1、它是集合框架中的顶层2、它存储的是键值对。
3、Map集合中必须保证键的唯一性。
4、如果存储键值对时,键重复,新值覆盖旧值。
其实存储的就是一种映射关系。
常见方法:增加:Put();putAll();删除:Clrea();Remove(key);判断:containKey();containValue();获取:get(Object key);Size();Values();entrySet();将map集合中的映射关系map.Entry其实Entry也是一个接口,它是map接口中的一个内部接口。
Interface Map{public static interface Entry{public abstract Object getKey();public abstract Object getValue();}}keySet();将map中所有的键都存入了set集合,因为set具备迭代器,所以可以迭代方式取出所有的键,在根据get方法获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合,在通过迭代器取出.|--HashMap:低层是哈希表数据结构,该集合是不同步的,允许使用null键和null值。
JDK1.2效率高|--LinkedHashMap:保证按照插入的顺序进行取出。
|--TreeMap:低层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。
3、Iterator迭代器原理:其实就collection这个集合公共取出方式,因为每个容器的自身的数据结构不同,它们的取出方式也是不同的,要根据每个容器的特点来定义特定的取出方式,而取出方式直接在访问容器中的元素,所以将取出方式定义在容器的内部,是一个内部类,而对外提供访问接口。
这样可以通过接口访问任何的collection容器中的元素,所以它的出现降低了耦合性,我们只用面对Iterator接口,和使用接口就可以了。
理解:抓布娃娃游戏机。
|--ListIterator列表迭代器:要想在迭代过程中进行增删操作Iterator是不可以的,它只有删除动作,所以可以使用其子接口listIterator,是list集合特有的取出方式,它包包含了增删改查的方法。
4、Collections和Collection的区别:(面试题)1、java.util.Collection 是一个集合接口。
它提供了对集合对象进行基本操作的通用接口方法。
Collection接口在Java 类库中有很多具体的实现。
Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
Collection├List│├LinkedList│├ArrayList│└Vector│└Stack└Set2、java.util.Collections 是一个包装类。
它包含有各种有关集合操作的静态多态方法。
此类不能实例化,就像一个工具类,服务于Java的Collection框架。
Java代码1.import java.util.ArrayList;2.import java.util.Collections;3.import java.util.List;4.5.public class TestCollections {6.7.public static void main(String args[]) {8.//注意List是实现Collection接口的9.List list = new ArrayList();10. double array[] = { 112, 111, 23, 456, 231};11. for (int i = 0; i < array.length; i++){12. list.add(new Double(array[i]));13. }14. Collections.sort(list);15. for (int i = 0; i < array.length; i++){16. System.out.println(list.get(i));17. }18. // 结果:23.0 111.0 112.0 231.0 456.019. }20.}。