1.Java集合大致可以分为四种体系:Set,List,Queue,Map。
2.Set代表 :无序不重复的集合
List代表有序、重复的集合
Map带有有映射关系的集合
Queue代表一种队列集合实现。
3.Java集合主要由两个接口派生出来的。Cellction和Map。这两个是Java集合框架的根接口。
4.Collection集合体系的继承树。
- Collection:
- Set:无序集合,元素不可重复。线程不安全。
- EnumSet:
- SortedSet:
- TreeSet:根据Comparable接口中的CompareTo(Object obj)或者Comparator接口的compare(T o1,T o2)方法的结果来按次序存储元素。
- HashSet:Set接口的典型实现。根据元素的hashCode的值决定元素的存储位置,元素不能重复。
- LinkedHashSet:根据元素的hashCode的值决定元素的存储位置,但它同时使用链表维护元素的次序。元素不能重复。
- Queue:队列,通常是先进先出。
- Deque:双端队列
- ArrayDeque:基于数组实现的双端队列,可以当做栈使用。
- PriorityQueue:按照元素大小重新排序的序列,不允许插入null。有自然排序和定制排序两种(Comparable接口或者Comparator接口)。
- List:有序集合,元素可以重复。集合中每个元素都有对应的顺序索引。
- LinkedList(还实现了Deque接口):可以根据索引来访问集合中的元素,可以被当成双端队列来使用。
- ArrayList:基于数组实现的List类。
- Vector:基于数组实现的List类。
- Stack:
5.Map体系的继承树:
- Map
- EnumMap:
- IdentityHashMap:
- HashMap:
- LinkedHashMap:线程不安全,key,value允许为null
- HashTable:
- Properties:线程安全,key,value不允许为null。Propeties相当于一个key和value都是String类型的Map。
- SortedMap:
- TreeMap:
- WeakHashMap:
6.Iterator接口:Iterator主要用于遍历Collection集合中的元素,Iterator对象也称为迭代器。注意:当使用Iterator对集合元素进行迭代时,Ierator并不是把集合元素本身给迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合本身没有任何影响。
7.HashSet集合的特点:
1.不能保证元素的排列顺序。
2.HashSet不是同步的,如果多线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,则必须通过代码来保证其同步。
3.集合元素可以是null。HashSet集合存入一个元素时,会根据该hashCode值来决定该对象在HashSet中的存储位置。如果有两个元素通过equals()方法比较返回true,但他们hashCode方法返回值不想等,HashSet将会把他们存储在不同的位置,依然可以添加成功。也就是说,HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等且两个对象的hashCode()方法返回值也相等。
8.ArrayList和LinkedList分别是基于数组的和基于基于链的线性表。由于数组以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好,所有的内部以数组作为底层实现的集合在随机访问时性能都比较好,而内部链表作为底层实现的集合,在执行插入、删除是拥有比较好的性能。
9.Set和Map的关系十分密切。Java源代码就是先实现了HashMap、TreeMap等集合,然后通过包装一个所有的value都为null的Map集合实现了Set集合类。