重温java基础之集合
8.1 java集合概述
数组元素既可以是基本类型的值,也可以是对象(实际是对象的引用变量);而集合里只能保存对象(实际是对象的引用变量)。
Collection接口、子接口及其实现类的继承树:

Map体系的继承树:

8.2 Collection和Iterator接口
1、使用Lambda表达式遍历集合
Java8为Iterable接口新增一个forEach(Consumer action)默认方法,该方法时一个函数式接口。

2、使用Iterator遍历集合元素
当使用Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只有通过Iterator的remove()方法删除上次next()方法返回的集合元素才可以,否则会引发异常。
3、使用Lambda表达式遍历Iterator
Java8为Iterator新增forEachRemaining(Consumer action)方法,Consumer的方法为accept(T t)。

4、使用Java8新增的Predicate操作集合


8.3 Set集合
1、HashSet类
(1)不能保证元素的排列的顺序;
(2)HashSet不是同步,假设有两个或者两个以上的线程同时修改了HashSet集合时,必须通过代码来保证其同步;
(3)集合元素值可以是null。
HashSet会根据存入元素对象的hashCode()得到hashCode值,然后根据hashCode值决定该对象的储存位置。如果有两个元素通过equals()方法比较返回true,但他们hashCode()方法返回值不相等,HashSet将会把它们存在不同位置。也就是说,HashSet集合判断两个元素相等的标准是equals()方法true和hashCode()值相等。
当使用HashSet储存对象时,如果两个对象通过equals方法比较返回true,这两个对象的hashCode值也应该相同。

当程序把可变对象添加到HashSet中之后,尽量不要去修改该集合元素中参与计算hashCode()、equals()的实例变量,否则将导致HashSet无法正确操作这些元素。
2、LinkedHashSet类
LinkHashSet按元素的添加顺序来访问集合里的元素。它需要维护元素的插入顺序,因此性能略低于HashSet,但是在迭代访问Set里的全部元素时有很好的性能,因为它以链表来维护内部顺序。
3、TreeSet类
TreeSet可以确保集合元素处于排序状态。


TreeSet支持两种排序方法:自然排序和定制排序。
(1)自然排序
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列,这种方式就是自然排序。
如果试图把一个对象添加到TreeSet时,则该对象的类必须实现Comparable接口,否则程序将会抛异常。
向TreeSet中添加的应该是同一个类的对象,否则也会抛异常。
TreeSet调用对象的compareTo(Object obj)方法与容器中的其他对象比较大小,然后根据红黑树结构找到它的存储位置。如果两个对象通过compareTo方法比较相等,新对象将无法添加到TreeSet集合中。(对于TreeSet来说,判断两个对象是否相等的唯一标准是两个对象通过compareTo方法比较是否返回0)。
(2)定制排序
如果需要实现定制排序,则需要在创建TreeSet集合对象时,提供一个Comparator对象与TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。Comparator是一个函数式接口。

8.4 List集合
1、List接口和ListIterator接口
List判断两个对象相等只要通过equals()方法比较返回true即可。

ListIterator用法:


8.6 Map集合
Map的实现类和子接口中key集的存储形式和对应Set集合中的元素的存储形式完全相同。
1、HashMap和Hashtable实现类
用作key的对象必须实现hashCode()方法和equals()方法。
HashMap、Hashtable判断两个value相等的标准是只要两个对象通过equals()方法比较返回true即可。
2、LinkedHashMap实现类

3、使用Properties读写属性文件

4、SortedMap接口和TreeMap实现类
TreeMap就是一个红黑树数据结构。TreeMap存储key-value对时,需要根据key对节点进行排序。它有两种排序方式。
(1)自然排序:TreeMap的所有key必须实现Comparable接口,而且所有的key应该是同一个类的对象,否则抛出ClassCastException异常;
(2)定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key排序。采用定制排序时不要求Map的key实现Comparable接口。

8.8 操作集合的工具类:Collections
1、排序操作
2、查找、替换操作
3、同步控制

浙公网安备 33010602011771号