HashMap简单理解

  HashMap是一个常用的Map集合,它的底层是数组和链表的结合。

  HashMap是非线程安全的,允许有一个key值为空,多个value值为null。

  当我们向HashMap中put元素的时候,会首先根据元素的key值的hashcode计算hash值,然后根据hash值确定元素在数组中的位置,如果该位置上已经存在元素,就会以链表的形式储存该元素,新加入的元素在链头,先加入的元素在链尾。如果该位置没有元素,就在该位置储存该元素。

  当程序试图将一个key-value对放入HashMap中是,会首先根据key的hashcode计算hash值,如果两个Entry的key的hash值计算后相同,那么这两个Entry的储存位置相同。如果两个Entry的key值通过equals比较返回true,那么新Entry的value将会覆盖之前Entry的value值,key值不会覆盖。如果两个Entry的key值通过equals比较返回false,新添加的Entry与原有的Entry就会形成链表结构,新添加的Entry在链头,最先添加的在链尾。

  适合做HashMap集合的key值得前提条件是这个值是否会发生改变。String值是不会发生改变的,因此String能做key值,包括Integer这样的包装类。如果自定义对象属性不可变,那么它就满足了作为key值得条件,所以当自定义对象不可变时也可以作为HashMap的key值。

猜你喜欢

转载自blog.csdn.net/xyfer1018/article/details/82115001