栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java集合(二)-Map

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java集合(二)-Map

Map
    • Map介绍
      • HashMap
        • HashMap疑问解答
      • linkedHashMap
      • TreeMap
      • Hashtable:
      • ConcurrentHashMap

Map介绍

Map 是最常用的集合类型之一,Map 是K V 形式的每一个键都对应一个值, 与Collection 无关;
Map 是一个接口 他的常用实现类有 HashMap、linkedHashMap、TreeMap、 HashTable、 ConcurrentHashMap、WeakReferenceHashMap…等一些;

HashMap

HasMap: 是非线程安全的Map集合 , key与value 都可为null。JDK1.7底层是数组+单向链表 JDK1.7之后是 数组+单向链表+红黑树;
1.8HashMap 当链表节点较多时会转为红黑树;

HashMap疑问解答

1.为什么使用 数组+链表
数组查询快
链表增删快
Map 是一个链表集合 Node[]
2.JDK1.8以后为什么使用红黑树 又在什么时候进行转换的
为什么使用红黑树? 答: 当链表长度过长循环查询不是一种很好的方式,所以引入红黑树 这样当链表长度过长也能有效的减少循环的次数;
HashMap 中当链表长度>=8会进行 红黑树的装换

3. put() 方法原理
在调用put()方法的时候,首次put()会调用resize()方法初始化长度为16 Node数组。
然后会判断 这个hash所在的位置有没有值,没有会调用 newNode() 创建一个新的Node 放到数组中。
有值的话,判断进行equals() 判断 equals为false 会循环找到最后一个Node 然后 newNode() 方法获取一个新的 Node 然后赋值到查出来的最后Node中 next属性中
如果链表长度 (Node 节点) >= 8的时候 调用会调用resize()将链表 转换为TreeNode 红黑树

linkedHashMap

linkedHashMap 是HashMap的子类, 记录了key 的插入顺序 ;

TreeMap

TreeMap: key自动排序 默认使用自然排序升序排序的;

Hashtable:

Hashtable 底层是 数组+单向链表实现的 线程安全的 Hashtable的方法是synchronized的 所以效率是低于HashMap的;key与value 是不能为null的;

ConcurrentHashMap

ConcurrentHashMap 底层采用分段的数组+链表实现的, 是线程安全的; ConcurrentHashMap 是1.5提供的 它是Hashtable的替代 , 比Hashtable 的扩展性更好;ConcurrentHashMap 是使用了锁分段技术来保证线程安全的! Hashtable锁机制是一次锁住整个hash表,从而在同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap 则是一次锁住一个桶;

      锁分段技术: 将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个数据被占用锁时其他段的数据也能被其他线程访问
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号