get() 与 put()方法?
HashMap中存储数据是用一个类型是Entry的数组,而Entry则是保存键值对的数据结构,并且有本身类型的next变量,可以构成链表。HashMap存储数据时,首先根据key的hashcode值找到应该保存在table数组的下标位置(bucket的位置),如果该位置之前没有保存过值,也就是没有发生碰撞,则保存这个键值对对象到该位置中;如果发生了碰撞,也就是说有两个对象的key的hashcode值相等,那么则需要通过key的equals方法判断这两个对象是否是同一个对象,如果是,那么原本存储的旧值会被新值所替换;如果不是同一个对象,则把新的键值对对象保存到旧的键值对对象next节点中,构成链表。
equals()和hashCode()的都有什么作用?
通过对key的hashCode()进行hashing,并按照用key的hashcode值按位与上数组长度,计算下标( length-1 & hash值),从而获得buckets的位置。如果产生碰撞,则利用key.equals()方法去链表或树中去查找对应的节点
注意:key的hashcode()方法用来找到Entry对象所在的桶;如果两个key有相同的hash值,他们会被放在table数组的同一个桶里面