1.集合框架的体系结构

Java常用集合框架对比

2.各集合框架对比

集合 底层数据结构 是否线程安全 其它
ArrayList Object数组 不安全 每次扩容1.5倍
LinkedList 双向链表 不安全 随机访问的方式为,根据index和链表长度的一半来判断,是从前开始访问,还是从后开始访问。但是随机访问的时间复杂度还是O(n)
Vevtor Object数组 安全 每次扩容2倍,线程安全的实现方式为在每一个方法增加synchronized关键字,其余和ArrayList基本上没有区别。
Stack栈 Object数组 Stack继承了Vector类,所以底层实现也是数组。同时stack自身有push,peek,pop等方法。其中push没有加synchronized关键字,其余都加了。所以并不是完全的线程安全。
hashMap Map.Entry数组加链表 不安全 大小总为2的指数幂,当链表长度>=8且数组长度>=64的时候,对应数组节点的链表会转为红黑树。集合不会再new对象的时候初始化,而是再第一次put的时候初始化。
hashtable Map.Entry数组加链表 线程安全 相对于hashMap来说相当于在所有的方法上加了synchronize关键字。
treeMap Map.entry的红黑树 线程不安全 因为是有序的Map,所以在遍历以及查询的时候都会有相应的顺序或者倒序的方法。
hashSet hashMap 不安全 hashset的值,都是存储在hashmap的key中,hashMap的值为new Object();
treeSet treemap 不安全 treeset的值,都是存储在treemap的key中,treemap的值存储的是new Object();

3.hashMap和hashtable的不同

  1. HashMap 继承于AbstractMap,Hashtable 继承于Dictionary.

  2. Hashtable线程安全,hashMap线程不安全。

  3. HashMap的key、value都可以为null。Hashtable的key、value都不可以为null。

  4. HashMap只支持Iterator(迭代器)遍历。而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

  5. HashMap添加元素时,是使用自定义的哈希算法。Hashtable没有自定义哈希算法,而直接采用的key的hashCode()。

4.Vector和ArrayList的不同

  1. ArrayList 是线程不安全的,Vector是线程安全的

  2. ArrayList 支持序列化,Vector不支持。

  3. ArrayList每次扩容1.5倍,Vector每次扩容2倍。

相关文章: