hashmap分析
=============hashmap简介===================
我们可以往hashmap中添加键值对,也可以通过key来获取value
当插入数据时,会先判断是否有足够的容量
如果不够,就扩容为到原来容量的两倍
够的话就先判断key是否为空,如果为空就插入到那个空的键值对
不为空就按照键值对直接插入
==========put方法分析===============
public V put(K key, V value) {
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = sun.misc.Hashing.singleWordWangJenkinsHash(key);
int i = indexFor(hash, table.length);
for (HashMapEntry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
先解析了一个hashmap,然后检测key是否为空,为空就往key为空的那个键值对中插入值
然后通过hash值和整个数组的长度获得数组总长度(不太明白为什么这么做)
不为空就判断key的hash值与参数中传递的key的hash值是否相同,以及key是否与参数中传递的相同
然后就往指定key里面放对应的值
==========获取hashmap中某个key对应的value==========
)
这个方法首先会判断key是否为空,为空就直接从key为空的那个键值对中获取值
不为空就通过与运算和指定key的hash值来获得下标,然后通过下标获得值
第一篇博客就这样结束吧,明天继续加油!!!