整体架构
Java的集合类由两个接口派生:Collection 、Map
Collection派生出3个接口:Set、Queue、List
Map派生出Hashtable、HashMap、LinkedHashMap、TreeMap
Collection 体系
HashSet:Set接口的典型实现
HashSet的特点:1.元素顺序不能保证;2.不同步;3.集合元素可为null
HashSet添加元素:根据hashCode确定在HashSet中存储位置
LinkedHashSet:HashSet的子类
LinkedHashSet的特点:1.增加链表维护元素顺序;2.插入慢,查询快
TreeSet:Set的实现接口Sorted接口的实现类
TreeSet的特点:1.可以定制排序;2.采用红黑树的结构存储元素
ArrayList:List类的典型实现
ArrayList的特点:1.线程不安全;2.性能高于Vector
Queue的特点:先进先出
PriorityQueue的特点:1.队列的顺序按照元素的大小排序;2.可以定制排序
Deque的特点:双端队列
ArrayDeque:1.数组双端队列;2.可以作为栈和队列
LinkedList:List和Deque的共同实现
LinkedList的特点:1.功能强大;2.查询慢插入快
Map 体系
HashMap & Hashtable :派生于AbstractMap
Hashtable的特点:1.线程安全;2.性能低;3.不允许null作为key和value
HashMap的特点:1.线程不安全;2.性能高;3.允许null作为key和value
LinkedHashMap:实现于HashMap
LinkedHashMap的特点:1.双向链表维护元素顺序;2.迭代快插入慢
TreeMap:实现于SortedMap
TreeMap的特点:1.定制排序;2.红黑树数据结构
WeekHashMap:1.实现于HashMap;2.value没有强引用后可能被垃圾回收
IdentityHashMap:要求key严格相等才算相等
HashSet 和 HashMap 性能问题
1.hash冲突后,冲突的元素在对应位置上以链表形式存储
2.负载极限默认为0.75,超过后进行rehashing
3.轻负载适合插入查询,但是迭代慢
4.尽可能开始根据实际设置初始化容量,减少rehashing