JavaMap集合原理

Map底层原理

区别

基础了解 Map集合是有Key和Value的,Collection集合是只有Value。
但是 Collection集合底层也是有Key和Value,只是隐藏起来。
Map集合中的元素,key和value的数据类型可以相同,也可以不同。
Map集合中的元素,key是不允许重复的, value是可以重复的。

Map的实现类

1、HashMap

使用位桶和链表实现(最近的jdk1.8改用红黑树存储而非链表),它是线程不安全的Map,方法上都没有synchronize关键字修饰,具体可以参考 问到 1.8新特性时 这里可说 几个实现类 一般都会说这个 自己经常用的

1. hasmap 的底层数据 类型为

JDK1.7及之前:数组+链表
JDK1.8:数组+链表+红黑树

HashMap 底层存储类型的转化

数组的长度必须是2的指数次幂,为什么HashMap的加载因子要设置为0.75,为什么链表长度大于等于8时转成了红黑树
在这里插入图片描述
在这里插入图片描述

当添加元素时,会通过哈希值和数组长度计算计算下标来准确定位该元素应该put的位置 在理想的状态下面是可以 把哈希值保存到数组里面 但是正常的使用是是不可能到理想状态的 所以就了哈希冲突 这个时候链表 的作用就来了 这些冲突的 哈希就会保存到链表 里面 少量数据时 链表是可以完美解决 但是数据多了 链表长度过长时 它的查询难度是远高于数组的 就会变成树 红黑树是一棵接近于平衡的二叉树,其查询时间复杂度为O,远远比链表的查询效率高

在这之间 即使数组没有哈希冲突 也会变成树
触发条件为
数组变成 红黑二叉树. : 数组的长度达到64个
链表 变 红黑树 :链表的长度达到8个时

2、HashTable

hashTable是线程安全的一个map实现类,它实现线程安全的方法是在各个方法上添加了synchronize关键字 从这里就可以看出 必会有代替它的东西出现

3、ConcurrentHashMap

在jdk1.6/1.7中的主要实现原理是segment段锁,它不再使用和HashTable一样的synchronize一样的关键字对整个方法进行枷锁,而是转而利用segment段落锁来对其进行加锁,以保证Map的多线程安全。

简单一点就是 多个 HashTable 组成的 好处就是 不用synchronize 对整个方法加锁 使用segment 它的长度为16 ,synchronize 整比为1 表面意思 提示16倍性能

get方法,查询元素

添加一个map

put(K key, V value)

遍历

//-map取出keyset
		Set<String> keySet = map.keySet();
		Iterator<String> iterator = keySet.iterator();
		while (iterator.hasNext()) {
			String key = iterator.next();
			Integer integer = map.get(key);
			System.out.println(key+"==="+integer);
		}

下面几个集合也是必懂 不晓得这些 基本就等消息了
ArrayList,LinkedList,HashSet

总结一周 让我感受最深的是经理 。每一天都有早会 大家都会说说自己的日常工作
以及遇到的问题 解决方法 总结 ,有时候我感觉别人已经讲的很完美了 , 但是他依然可以从中补充 并从中精准点明中心 使大家都听的懂 其说出来的计划安排 考虑程度
对待事物的全面性 那种人感觉说的 都是有用的 其中周五他说看完了一本书 总结出了 3个字 手 破 离
手: 可以用在新人 刚入公司时 有什么你学的 看的 一定要多动手实现 做总结文档 做什么事要有计划 计划的安排 要考虑到 如 按时完成计划 / 计划超时 /计划因为其他延误 /计划存在不可逆
破 : 体制化学习 学习优秀体制化 在延用老的 模式时 也要有自己独立创新时的模式
离 :

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的Map集合是一种用于存储键对的数据结。它提供了快速的查找和访问元素的能力。在Java中,Map接口有多个实现类,如HashMap、TreeMap、LinkedHashMap等,它们在底层实现上有所不同。 其中,HashMap是最常用的Map实现类之一。它使用哈希表来存储键对,通过计算键的哈希码来确定存储位置,从而实现快速的插入、删除和查找操作。具体来说,HashMap内部使用一个数组来存储元素,每个数组元素称为桶(bucket),每个桶可以存储多个键对。当插入一个键对时,HashMap会根据键的哈希码计算出对应的桶索引,然后将键对存储在该桶中。当需要查找或删除一个键对时,HashMap会根据键的哈希码找到对应的桶,并在桶内进行查找或删除操作。 另外,HashMap还使用了链表或红黑树来解决哈希冲突问题。当多个键的哈希码相同时,它们会被存储在同一个桶中,形成一个链表或红黑树。这样,在查找或删除时,HashMap会先根据键的哈希码找到对应的桶,然后遍历链表或红黑树来找到具体的键对。 除了HashMap,还有其他的Map实现类。例如,TreeMap使用红黑树来存储键对,它能够保持键的有序性;LinkedHashMap在HashMap的基础上使用了双向链表来维护插入顺序或访问顺序。 总结一下,Java中的Map集合底层原理主要涉及哈希表、哈希冲突解决和链表/红黑树等数据结构的运用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值