ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Map

2022-05-09 15:32:52  阅读:103  来源: 互联网

标签:Map HashMap 对象 元素 链表 数组


Map:是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复(可存在一个null),而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。
Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。还有HashTable

 

HashMap:

HashMap底层数据结构为数组+链表+红黑树,主要数据存储对象为Node<k, V>[] table(jdk1.7使用的Entry), 关键方法put();

扩容机制:如果某个桶中的链表长度大于等于8了,则会判断当前的hashmap的容量是否大于64,如果小于64,则会进行扩容;如果大于64,则将链表转为红黑树。

  1. 先⽣成新数组

  2. 遍历⽼数组中的每个位置上的链表或红⿊树

  3. 如果是链表,则直接将链表中的每个元素重新计算下标,并添加到新数组中去

  4. 如果是红⿊树,则先遍历红⿊树,先计算出红⿊树中每个元素对应在新数组中的下标位置

    a. 统计每个下标位置的元素个数

    b. 如果该位置下的元素个数超过了6,则⽣成⼀个新的红⿊树,并将根节点的添加到新数组的对应位置

    c. 如果该位置下的元素个数没有超过6,那么则⽣成⼀个链表,并将链表的头节点添加到新数组的对应位置

  5. 所有元素转移完了之后,将新数组赋值给HashMap对象的table属性

 

HashTable: 底层数据结构为数组+链表,与HashMap相似,但其是线程安全的,因为其public方法上都增有synchronized。

 

TreeMap:

TreeMap底层数据结构为Entry(双向链表),存储数据时通过comparator比较器进行比较,找到其put的对象的key所在的位置。所生成的map是有序的。

 

标签:Map,HashMap,对象,元素,链表,数组
来源: https://www.cnblogs.com/blank-link/p/16249380.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有