- 0
- 0
- 约8.78千字
- 约 7页
- 2017-02-09 发布于重庆
- 举报
HashMap深度分析
java.util.HashMap是很常见的类,前段时间公司系统由于对HashMap使用不当,导致cpu百分之百,在并发环境下使用HashMap 而没有做同步,可能会引起死循环,关于这一点,sun的官方网站上已有阐述,这并非是bug。HashMap的数据结构???????? HashMap主要是用数组来存储数据的,我们都知道它会对key进行哈希运算,哈系运算会有重复的哈希值,对于哈希值的冲突,HashMap采用链表来解决的。在HashMap里有这样的一句属性声明:transient Entry[] table;Entry就是HashMap存储数据所用的类,它拥有的属性如下final K key;V value;final int hash;EntryK,V next;看到next了吗?next就是为了哈希冲突而存在的。比如通过哈希运算,一个新元素应该在数组的第10个位置,但是第10个位置已经有Entry,那么好吧,将新加的元素也放到第10个位置,将第10个位置的原有Entry赋值给当前新加的 Entry的next属性。数组存储的是链表,链表是为了解决哈希冲突的,这一点要注意。几个关键的属性存储数据的数组transient Entry[] table; 这个上面已经讲到了默认容量static final int DEFAULT_INITIAL_CAPACITY = 16;最大容量static final int MAXIMUM_CAPACITY = 1 30;默认加载因子,加载因子是一个比例,当HashMap的数据大小=容量*加载因子时,HashMap会将容量扩容static final float DEFAULT_LOAD_FACTOR = 0.75f;当实际数据大小超过threshold时,HashMap会将容量扩容,threshold=容量*加载因子int threshold;加载因子final float loadFactor;HashMap的初始过程构造函数1??? public HashMap(int initialCapacity, float loadFactor) {??????? if (initialCapacity 0)??????????? throw new IllegalArgumentException(Illegal initial capacity: +?????????????????????????????????????????????? initialCapacity);??????? if (initialCapacity MAXIMUM_CAPACITY)??????????? initialCapacity = MAXIMUM_CAPACITY;??????? if (loadFactor = 0 || Float.isNaN(loadFactor))??????????? throw new IllegalArgumentException(Illegal load factor: +?????????????????????????????????????????????? loadFactor);??????? // Find a power of 2 = initialCapacity??????? int capacity = 1;??????? while (capacity initialCapacity)??????????? capacity = 1;?? ??????? this.loadFactor = loadFactor;??????? threshold = (int)(capacity * loadFactor);??????? table = new Entry[capacity];??????? init();??? }重点注意这里 while (capacity initialCapacity)??????????? capacity = 1;capacity才是初始容量,而不是initialCapacity,这个要特别注意,如果执行new HashMap(9,0.75);那么HashMap的初始容量是16,而不是9,想想为什么吧。构造函数2public HashMap(int initialCapacity) {??????? this(initialCapacity, DEFAULT_LOAD_FACTOR);??? }构造函数3,全部都是默认值?? public HashMap() {??????? t
您可能关注的文档
最近下载
- YYT 0471.2-2004 接触性创面敷料试验方法 第2部分 透气膜敷料水蒸气透过率.docx VIP
- XXX油库改扩建工程(建筑专业监理实施细则).doc VIP
- 机械制图三视图学习课件.ppt VIP
- 金融不良资产收购之尽职调查[官方2017年最新版].pdf VIP
- 4.3《小练习(3)》(教学课件)四年级 数学下册 沪教版.pptx VIP
- 贵州省2019年高职(专科)分类招生中职生文化综合考试数学试卷.docx VIP
- 设备验收单范本.doc VIP
- DB3707_T 101-2023 规模化鸭场坦布苏病毒病防控技术规程.docx VIP
- 《会计信息系统应用》教案 第2课 系统明白卡和系统管理.pdf VIP
- 2025公安部大数据中心招聘33人笔试参考题库附答案解析.docx VIP
原创力文档

文档评论(0)