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时转成了红黑树

java map底层数据结构 java的map底层原理_链表


java map底层数据结构 java的map底层原理_map_02

当添加元素时,会通过哈希值和数组长度计算计算下标来准确定位该元素应该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个字 手 破 离
手: 可以用在新人 刚入公司时 有什么你学的 看的 一定要多动手实现 做总结文档 做什么事要有计划 计划的安排 要考虑到 如 按时完成计划 / 计划超时 /计划因为其他延误 /计划存在不可逆
破 : 体制化学习 学习优秀体制化 在延用老的 模式时 也要有自己独立创新时的模式
离 :