K - V - public class DefaultHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
这个hash表的实现完全类似JDK的HashMap, 但作了如下改变, 以便于子类派生, 并实现特殊功能:
和JDK的HashMap一样, 这个实现具有以下特性:
Map m = Collections.synchronizedMap(new DefaultHashMap(...));
| 限定符和类型 | 类和说明 |
|---|---|
protected static class |
DefaultHashMap.Entry<K,V>
Map.Entry的实现.
|
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>| 限定符和类型 | 字段和说明 |
|---|---|
protected float |
loadFactor
负载系数.
|
protected int |
modCount
当hash表发生"结构改变"的计数.
|
protected int |
size
Hash表中的entry数.
|
protected DefaultHashMap.Entry<K,V>[] |
table
Hash表, 长度可变 - 但长度必须是2的整数次幂.
|
protected int |
threshold
阈值.
|
| 构造器和说明 |
|---|
DefaultHashMap()
创建一个空的hash表.
|
DefaultHashMap(int initialCapacity)
创建一个空的hash表.
|
DefaultHashMap(int initialCapacity,
float loadFactor)
创建一个空的hash表.
|
DefaultHashMap(Map<? extends K,? extends V> map)
复制指定Map内容相同的HashMap.
|
| 限定符和类型 | 方法和说明 |
|---|---|
protected void |
addEntry(K key,
V value)
加入一个entry到hash表中, 但不会对hash表进行resize()操作.
|
void |
clear()
清除hash表中的所有entry.
|
Object |
clone()
"浅"拷贝hash表, key和value本身并不被复制.
|
boolean |
containsKey(Object key)
如果hash表中包含指定key的entry, 则返回true.
|
boolean |
containsValue(Object value)
判断hash表中是否有一个或多个entry具有指定的value.
|
Set<Map.Entry<K,V>> |
entrySet()
取得entry的集合视图.
|
protected static boolean |
eq(Object x,
Object y)
比较两个对象.
|
V |
get(Object key)
返回指定key对应的value.
|
protected int |
getCapacity()
取得hash表的容量.
|
protected DefaultHashMap.Entry<K,V> |
getEntry(Object key)
返回指定key对应的entry.
|
protected float |
getLoadFactor()
取得hash表的负载系数.
|
protected int |
getThreshold()
取得hash表的阈值.
|
protected static int |
hash(Object obj)
返回对象的hash值.
|
protected static int |
indexFor(int hash,
int length)
返回索引值, 根据指定的hash值和数组的长度.
|
boolean |
isEmpty()
判断是否为空的hash表.
|
Set<K> |
keySet()
取得key的集合视图.
|
protected Iterator<Map.Entry<K,V>> |
newEntryIterator()
子类覆盖此方法, 用来创建entry的遍历器.
|
protected Iterator<K> |
newKeyIterator()
子类覆盖此方法, 用来创建key的遍历器.
|
protected Iterator<V> |
newValueIterator()
子类覆盖此方法, 用来创建value的遍历器.
|
protected void |
onInit()
给子类一个机会初始化自己.
|
V |
put(K key,
V value)
将指定的value和key关联.
|
void |
putAll(Map<? extends K,? extends V> map)
将Map中的所有项都加入到当前的Map中.
|
V |
remove(Object key)
将指定key的entry从hash表中删除(如果该entry存在的话).
|
protected DefaultHashMap.Entry<K,V> |
removeEntry(Object o)
删除指定的entry.
|
protected DefaultHashMap.Entry<K,V> |
removeEntryForKey(Object key)
删除指定key对应的entry, 并返回被删除的entry.
|
protected void |
resize(int newCapacity)
对map进行扩容.
|
int |
size()
返回hash表中entry的个数.
|
protected void |
transfer(DefaultHashMap.Entry<K,V>[] newTable)
将所有entry从当前表中移到新表中(扩容).
|
Collection<V> |
values()
取得value的集合视图.
|
equals, hashCode, toStringcompute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace, replaceAllprotected transient DefaultHashMap.Entry<K,V>[] table
protected transient int size
protected int threshold
protected final float loadFactor
protected transient volatile int modCount
public DefaultHashMap()
public DefaultHashMap(int initialCapacity)
initialCapacity - 初始容量.public DefaultHashMap(int initialCapacity,
float loadFactor)
initialCapacity - 初始容量loadFactor - 负载系数.public int size()
public boolean isEmpty()
public V get(Object key)
public boolean containsKey(Object key)
containsKey 在接口中 Map<K,V>containsKey 在类中 AbstractMap<K,V>key - 测试指定的key是否存在.public boolean containsValue(Object value)
containsValue 在接口中 Map<K,V>containsValue 在类中 AbstractMap<K,V>value - 要测试的valuepublic Set<K> keySet()
public Collection<V> values()
public Set<Map.Entry<K,V>> entrySet()
public Object clone()
clone 在类中 AbstractMap<K,V>protected void onInit()
protected DefaultHashMap.Entry<K,V> getEntry(Object key)
key - 返回指定key对应的entryprotected void addEntry(K key, V value)
key - hash表的keyvalue - hash表的valueprotected DefaultHashMap.Entry<K,V> removeEntryForKey(Object key)
key - 要删除的entry的keyprotected DefaultHashMap.Entry<K,V> removeEntry(Object o)
o - 要删除的entryprotected Iterator<Map.Entry<K,V>> newEntryIterator()
protected static int hash(Object obj)
obj - 取得指定对象的hash值protected static boolean eq(Object x, Object y)
x - 第一个对象y - 第二个对象protected static int indexFor(int hash,
int length)
hash - hash值length - 数组的长度, 必然是2的整数次幂protected void resize(int newCapacity)
newCapacity - 新的容量(必须为2的整数次幂).protected void transfer(DefaultHashMap.Entry<K,V>[] newTable)
newTable - 新表protected int getCapacity()
protected float getLoadFactor()
protected int getThreshold()
Copyright © 2015. All rights reserved.