一、初窥HashMap
HashMap是应用更广泛的哈希表
实现,而且大部分情况下,都能在常数时间性能的情况下进行put和get操作。要掌握HashMap,主要从如下几点来把握:
- jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现
- 可以存储null键和null值,线程不安全。在HashMap中,null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。
当get()方法返回null值时,即可以表示HashMap中没有该key,也可以表示该key所对应的value为null
。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个key,应该用containsKey()
方法来判断。而在Hashtable中,无论是key还是value都不能为null。 - 初始size为16,扩容:newsize = oldsize*2,
size一定为2的n次幂
- 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入</