一.概述

集合由两个类派生而出

Collection : ( Set 、List 、Queue) 

  • Set:无序、不重复
  • List:有序、可重复
  • Queue:队列结构、先进先出

Map: (HashMap Hashtable TreeMap)

  • HashMap:key和value允许为null
  • Hashtable:key和value不允许为null
  • TreeMap:可排序

 

二.Set介绍

1.HashSet

1.1 HashSet特性

无序,不可重复、非线程同步,元素值可以为null

1.2 HashSet判断重复元素的依据

1.HashSet是根据HashCode决定存储位置

2.仅当HashCode和equals同时为true时,判断元素重复

3.equals比较为true,hashCode比较为false,仍可以添加成功,但与Set规则冲突了

4.equals为false,hashCode为true,可以成功,这种更严重(HashSet是根据hashCode快速找到地址定位的,如果存在两个以上相同的hashCode,性能会下降)

1.3 HashSet添加元素重写equals()和hashCode()的规则

要么都为true,要么都为false

1.4 HashSet存储注意事项

HashSet存储完元素后,不要轻易改动会影响hashCode和equals方法结果的实例变量,否则可能会导致无法找到之前存储的对象

2.TreeSet

2.1 Compareble接口

compareTo(Object obj)方法规则

当A.compareTo(B) ,当A < B 返回 -1 ,当A == B 返回 0 ,当A > B返回1

2.2 TreeSet性质

TreeSet添加元素时必须实现Compareble接口,自然排序时按照compareTo的结果升序排序

有序,不可重复,非线程同步,元素值不可以为null

2.3 TreeSet判断重复元素的依据

仅compareTo()返回0时,TreeSet判断该元素重复

2.4 TreeSet添加元素重写equals()和compareTo()的规则

当equals()返回true时,compareTo()返回0

2.5.TreeSet注意事项

(1)添加的元素必须实现Comparable接口

(2)因为会调用CompareTo接口比较元素,所以最好是只添加同一种类型的对象,以免发生ClassCastException

(3) 与HashSet一样添加完以后就不要修改影响CompareTo判断元素大小的对象属性,否则会造成无法删除,找不到修改前的元素等问题(按红黑树存储,修改后破坏了结构)

三.List介绍

1.基本介绍

List分为ArrayList和LinkedList,前者采用线性表的数据结构,后者采用链表的数据结构

ArrayList使用get()随机访问效率较高,LinkedList使用迭代器访问效率较高

2.使用场景

1.ArrayList适用于遍历、查找比较多的时候效率较高,缺点是增删效率较慢

2.LinkedList适用于大量增删操作,查询效率较低