摘要:IdentityHashMap与常用的HashMap的区别是: 前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2) == true 时才会认为两个key相等。———
阅读全文
摘要:1 h%n==h&(n-1) 增加运算速度 2 使hash分布更均匀 HashMap源码解析笔记 3 扩容时仅需要多比较1个bit: if ((e.hash & oldCap) == 0) { 重点 newTab[j + oldCap] = hiHead;重点 jdk1.7 1.8 hash map
阅读全文
摘要:1 扩容 1.7 1.8 2 jdk8 引入红黑树 3 1.7 先扩容再插入,1.8先插入再决定是否扩容 4 1.7头插( 同一位置上新元素总会被放在链表的头部位置;这样先放在一个索引上的元素终会被放到Entry链的尾部 ),1.8尾插 细节:为什么是8 1)treenodes的大小大约是常规节点的
阅读全文
摘要:我们知道HashMap的存储位置是按照key这个对象的hashCode来存放的,而TreeMap则是不是按照hashCode来存放,他是按照实现的Comparable接口的compareTo这个方法来存储的,只要compareTo的返回结果为0就表示两个对象相等,那么就存不进去两个对象,后put的就
阅读全文
摘要:输出: put 0可能触发删除 - 0:0可能触发删除 - 1 10put 1可能触发删除 - 0:0可能触发删除 - 2 10put 2可能触发删除 - 0:0可能触发删除 - 3 10put 3可能触发删除 - 0:0可能触发删除 - 4 10put 4可能触发删除 - 0:0可能触发删除 -
阅读全文
摘要:http://blog.csdn.net/guoweimelon/article/details/50804799HashSet是Java Map类型的集合类中最常使用的,本文基于Java1.8,对于HashSet的实现原理做一下详细讲解。(Java1.8源码:htt...
阅读全文
摘要:http://blog.csdn.net/justloveyou_/article/details/71713781 1.原理 笔者曾在《Map 综述(一):彻头彻尾理解 HashMap》一文中提到,HashMap 是 Java Collection Framework 的重要成员,也是Map族(如
阅读全文
摘要:摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1....
阅读全文
摘要:问题最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题...
阅读全文
摘要:(一) 总结: 0.初始化:大于initialCapacity的最小的2的n次幂,如果initailCapacity为空,取16,为什么取2的n次幂为数组长度,见ex 1.Object.hashCode() 取得32位原始int h 2.h的高位与低位作异或处理,加大低位的随机性,掺杂了高位的部分特
阅读全文
摘要:0.继承不同,HashMap继承AbstractMap,HashTable继承Dictionary1.HashMap是非synchronized的,HashTable则是同步的由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比Has...
阅读全文
摘要:Arraylist 主要构造函数 public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object...
阅读全文