优点
速度等加快
底层数据结构
底层数据结构的改变
HashMap的比较必须保证没有重复元素,每次加入的时候必须要与前一个进行比较(原有模式是数组加上链表)比较索引值 如果索引值相同 比较具体数值(使用equals方法) 为避免碰撞 当使用75%的时候进行扩容 扩容后需要进行重新排序 运算之前的位置,jdk1.8之后进行改变 数组-链表-红黑树,当碰撞个数大于8且总容量大于64,
数组中储存的是entry类型
数组具有索引值
默认的长度是16
对对象进行HashCode算法生成数组的索引值,并找到对应的位置,如果该索引值没有元素,直接进行储存。
当索引值存在数值的时候
进行值比较
数值相同 ,进行覆盖
数值不相同,生成链表失去优势,极端的情况需要查询所有(避免碰撞)
当对象的值一样,hashequals生成的一样
当元素占有75%的时候进行扩容,扩容之后每个元素进行新的运算以及扩容,碰撞的概率就会变低
碰撞避免不了,效率就会变低
现在java8
数组+链表+红黑表
当某一个链表的个数大于8同时总容量大于64%的时候,会进行转变(转变为红黑树,除了添加之外,其他的效率都会比链表更快,添加的时候链表直接在后面),并且扩容之后不用重新运算hashcode的数值,只用找原来hash表的总长度加上当前长度的位置(2倍)
hashset、concurrentHashMap、、随之改变
特征
拉姆达表达式
stream API