- 浏览: 29154 次
- 性别:
- 来自: 北京
最新评论
文章列表
java.util.concurrent.ConcurrentHashMap:
ConcurrentHashMap是支持高并发、高吞吐量的线程安全的HashMap实现。它允许多个修改操作并发进行,关键在于使用了多个锁来控制对hash表的不同部分(Segment)进行的修改。每个段是一个小的hash table,有自己的锁,只要修改操作发生在不同的段上,就可以并发进行。在执行跨段的操作时首先尝试在不锁定整个map的情况下进行操作,不成功后再锁定整个map。key和value都不能为null。
ConcurrentHashMap中的重要字段:
1. int DEFAULT_INITIAL_CA ...
LinkedHashMap中重要的方法:
1. void clear()
调用HashMap中的clear方法清空数据,同时设置before和after都指向header。
2. boolean containsValue(Object value)
重写了HashMap中的containsValue方法,现在查询和table的容量无关了,只与实际存储的数据量有关。
3. V get(Object key)
得到指定key所对应的value。如果accessOrder为true时会调整所访问的Entry的位置。
4. void addEntry(int hash, K key, V va ...
java.util.LinkedHashMap:
LinkedHashMap继承自HashMap,但它具有可预知的迭代顺序。LinkedHashMap维护着一个运行于所有条目的双重链表,此链表定义了迭代顺序,这个顺序可以是插入顺序或者是访问的顺序。基本操作和父类HashMap相似,它通过重写父类相关的方法来实现自己的双重链表特性。
LinkedHashMap中重要的字段:
1. Entry<K,V> header
在构造的时候被初始化,开始的时候header的头尾都是指向自身。
2. boolean accessOrder
迭代时的顺序,若为false则按照插入的顺序排序;若 ...
HashMap中重要的方法:
1. public V put(K key, V value)
HashMap中允许key为null,当key为null时,调用private V putForNullKey(V value)把对应的Entry放到table[0]位置。如果key不为null,利用key计算hash码,从而得到对应的table下标,如果Entry<K,V> e = table[i]已经存在,则更新e.value,如果Entry<K,V> e = table[i]不存在,modCount加1,记录结构变化,调用void addEntry(int hash, K ...
java.util.HashMap:
table数组中存放的是单向链表Entry,Entry中存放的实际数据,一个链表中可能有多个数据,由这些数据的Key可以算出hashCode得到在table中的相同的“桶位”。hashMap能实现快速定位,就是利用了这一特点。不需要对所有数据进行迭代,利用key的hashCode快速找到“桶位”,然后只在桶位中单向链表中的少量数据中进行迭代,所以速度很快。通过由key生成的hash码,可以找到table数组中对应的单向链表Entry,然后在Entry中找到对应的key,从而取出value。
HashMap中重要的字段:
1. DEFAULT_INITI ...