HashMap
哈希表是一个以数组和单向链表的集合体
数据查询效率高
链表增删效率高
哈希表结合在一起,发挥他们的优点
哈希表底层源代码
public class HashMap{
HashMap底层实际是一个数组
Node<K,V>[] table
静态内部类HashMap.Node
static calsss Node<K,V>{
final int hash; //哈希值(哈希值是 key的hashCode方法的指向结果,hash值通过哈希函数/算法可以转换成储存数组的下标
final K key; //储存到Map集合中的那个key
V value; //存储到Map集合中的value
Node<K,V> next ; //下一个节点的内存地址
}
}
就是说,一个节点有四个元素:哈希值,K,V,下一个节点的内存地址
哈希表/散列表:一维数组,这个数组中每一个元素都是一个单向链表(数组和链表的结合体)
put()原理
每次向里面添加K,V的时候会利用Key的hashCode()方法生成一个哈希值(独一无二,类似内存地址)
并用算法决定数组下标,如果下标重复,会拿着Key与此链表里的节点进行equals比对,相同则覆盖数据(意为Key不允许重复),反则往末尾里再添加一个Node(链表添加节点)