重温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、同步控制

 

posted @ 2019-11-13 15:14  X丶Sparkle  阅读(90)  评论(0)    收藏  举报