Collections是用于操作集合的工具类,Collection是集合的架构。
完整的架构为:
- List、Set、Map都是接口,前两个继承至Collection接口,Map为独立接口
- Set下有HashSet,LinkedHashSet,TreeSet
- List下有ArrayList、Vector、LinkedList
- Map下有HashTable、LinkHashMap、HashMap、TreeMap
- Collection接口下还有个Queue接口,有PriorityQueue类
Queue接口与List、Set同一级别,都是继承了Collection接口。
总结:
Collection接口:
一、List有序,可重复
- ArrayList
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程不安全,效率高
- Vector
优点:底层数据结构是数组,查询快。增删慢。
缺点:线程安全,效率低
Stack继承自Vector,实现一个后进先出的堆栈。
- LinkedList
优点:底层数据结构是链表,查询慢,增删快。
缺点:线程不安全,效率高
二、Set无序,唯一 (排序就用TreeSet或者LinkeHashSet 否则就HashSet)
- HashSet (无序,唯一)
是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束 。
- LinkeedHashSet (FIFO插入有序,唯一)
使用链表扩展实现HashSet类,支持对元素的排序
-
-
-
-
- 1.由链表保证元素有序
- 2.由哈希表保证元素唯一
-
-
-
- TreeSet (唯一,有序)
是红黑树实现的,Treeset中的数据是自动排好序的,不允许放入null值 。
如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
三、Map键值对(TreeMap是有序的,HashMap和HashTable是无序的。Hashtable的方法是同步的,HashMap的方法不是同步的。Hashtable是线程安全的,HashMap不是线程安全的HashMap效率较高,Hashtable效率较低。)
- HashMap
存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
- Hashtable
Hashtable是线程安全的,其他的和HashMap相似。
- LinkedHashMap
保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
- TreeMap-->SortedMap
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的;