java collection套餐(1)烩总

图图图图

在这里插入图片描述
嗯 我尽力了T_T

各种对比
  • List中

  • HashMap vs Hashtable vs LinkedHashMap vs TreeMap

hashmaphashtable
线程安全?不安全synchronized保证线程安全
初始化默认长度1611
怎么扩容2*n2*n+1
null-key,null-value可以null-key但只允许一个;允许null-value都不行
结构数组+链表/红黑树数组+链表
继承类AbstractMapDictionary

LinkedHashMap继承自HashMap,在HashMap结构的基础上增加了双向链表,是有序的。
TreeMap的底层结构是红黑树,不允许有空值,有序性靠存入元素实现Comparable/Comparator实现。
一致性哈希其实是用TreeMap实现的,感兴趣可以看一下,爱的魔力转圈圈,前人的智慧真是无限~

  • Hashtable vs ConcurrentHashMap
HashtableConcurrentHashMap
结构数组+链表分段的数组+链表/红黑树
线程安全同一把锁分段锁
synchronizedsynchronized和CAS

ConcurrentHashMap的变化
1.7
一个ConcurrentHashMap包含一个Segment数组,每个Segment中的结构类似于HashMap(HashEntry数组+链表)
1.8取消了Segment分段锁,采用CAS和synchronized保证并发安全:synchronized只锁定链表或红黑树的头结点,只要坐标不冲突就不会产生并发,效率更高;数据结构也变成了数组+链表/红黑树

CAS咋用的?
//如果坐标i桶内为空的话,CAS插入
else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {
                if (casTabAt(tab, i, null,
                             new Node<K,V>(hash, key, value, null)))
                    break;                   // no lock when adding to empty bin
            }
  • HashMap vs HashSet
    其实HashSet底层是基于HashMap实现的,可以去看一下源码~
    比如
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public boolean add(E e) {
       return map.put(e, PRESENT)==null;
   }

那hashset是怎么判断重复的呢?
因为hashMap<k,v>的key是唯一的呀

  • ArrayList vs LinkedList vs vector
ArrayListLinkedListvector
线程安全?NoNoYes
数据结构Object数组双向链表Object数组
选择问题随机查找插入删除-

关于A和L的选择,虽然是这么说的,但其实我看了别人的性能测试博客,ArrayList的整体性能是优于LinkedList的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值