彻底弄懂HashMap
我们在面试中, 也会经常被问到HashMap相关的底层实现, 阿巴阿巴.... HashMap的底层实现 首先它是基于数组(存储对象的引用)加链表(存储对象)实现的 当我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象 简单的模拟实现put的底层实现 jdk1.8 put(k, v){ int code = k.hashcode(); //计算key的hashcode int index = code % table.length; // 存放的数组下表 table[index] = new Entry(k, v, null); // 对应的对象 } // 第二次插入 HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 table[index] = new Entry(k, v, table[index]); // todo 底层实现 若key相同时 返回并覆盖 否则插入链表的下一个节点 if (p