java集合对比

详情参考:https://www.cnblogs.com/skywang12345/p/3323085.html#4269559

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

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只支持Iterator(迭代器)遍历。而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

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

Vector和ArrayList的不同

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值