HashMap是一个散装桶(数组或链表),它存储的内容是键值对(key-value)映射。
HashMap采用了数组和链表的数据结构,继承了数组的线性查找和链表的寻址修改。
HashMap是非synchronized的,所以很快。
HashMap可以接受null键和值,而HashTable不能。
ConcurrentHashMap与HashTable因为在多线程并发的情况下,put操作时无法分辨key是没找到为null,还是key值对应的value为null,所以基于这类情况不允许键值为null。
HashMap是线程不安全的,也就无所谓了。
【工作原理】
HashMap是基于hashing的原理,咱们使用put(key,value)把对象存储到HashMap中,使用get(key)从HashMap中获取对象。
当我们使用put方法传递键值对的时候,先对键调用hashCode方法,计算并返回的hashCode……
HashMap在bucket中存储键对象和值对象,作为Map.node。
以下是HashMap的初始化(简单模拟):
Node table = new Node[16] //散列桶初始化,table hash;
//hash值
key;
//键
value;
//值
Node next;
//用于指向链表的下一层(产生冲突,用拉链法)
class Node {