HashMap底层的数据结构是哈希表,又称散列表。哈希表集合了数组和链表的优点,底层是一个node数组,而数组里面的每一个元素都是一个单链表。每个node都有四个属性分别是:**object k, object v, int hash, node next**。
hashmap.put(k,v)实现原理
第一步:将key值和value值封装成一个node对象中;
第二步:通过key的hashCode()方法,得到其对应的哈希值;
第三步:通过哈希函数将哈希值转换为对应的数组下标并进行判断;
第四步:如果对应数组下标的位置上没有任何元素,那么则直接将node添加到该位置;如果对应数组下标位置上有链表,那么调用equals方法与链表上的node对象的key值进行比较
如果返回的全是false,那么直接将该节点插入到链表尾段,如果其中某一个节点返回true,那么将该节点的value值覆盖,完成添加。
v=HashMap.get(k)实现原理
第一步:通过key的hashCode()方法,得到其对应的哈希值;
第二步:通过哈希函数将哈希值转换为对应的数组下标并进行判断;
第三步:如果对应数组下标位置上没有任何元素,v=HashMap.get(k)返回null;如果对应数组下标位置上有链表,那么调用equals方法与链表上的node对象的key值进行比较,如果返回的全是false,那么v=HashMap.get(k)返回null;如果其中某一个节点返回true,那么此节点的value就是我们要找的值,get方法返回该值。