![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
集合
一切随缘~~~
最难不过坚持。
展开
-
谈谈对于 HashSet 的理解
只不过 HashSet 的所有 value 都是由一个变量 Present 来填充的,是一个 Object 对象。其实内部就是依靠 HashMap 实现的,HashSet 使用了组合,有一个成员变量就是 HashMap。add 方法啊,remove 方法啊,底层都是调用的 HashMap 中的方法。原创 2023-10-28 13:53:53 · 119 阅读 · 0 评论 -
如何设计线程安全的 HashMap?
如何设计线程安全的 HashMap?原创 2023-10-28 11:45:23 · 372 阅读 · 0 评论 -
如何解决 HashMap 线程不安全的问题呢?
● Collections.synchronizedMap 是使用 Collections 集合工具的内部类,通过传入 Map 封装出一个 SynchronizedMap 对象,内部定义了一个对象锁,方法内通过对象锁实现;● ConcurrentHashMap 在 jdk1.7 中使用分段锁,在 jdk1.8 中使用 CAS+synchronized。● HashTable 是直接在操作方法上加 synchronized 关键字,锁住整个table数组,粒度比较大;原创 2023-10-28 11:43:04 · 108 阅读 · 0 评论 -
HashMap 为什么线程不安全?
HashMap 为什么线程不安全?原创 2023-10-28 11:42:29 · 112 阅读 · 0 评论 -
HashMap 的长度为什么是 2 的幂次方?
HashMap 的长度为什么是 2 的幂次方?原创 2023-10-24 21:30:40 · 220 阅读 · 0 评论 -
Hashmap 扩容流程?
会遍历每个哈希桶,如果只有一个节点的话,就直接插入到 e.hash & (newCap - 1) 的位置;如果是链表,将原来的链表拆分成两个链表, lo 链表和 hi 链表,并将这两个链表分别放到新的table的 j 位置和 j + oldCap 上, j 位置就是原链表在原 table 中的位置, 拆分的标准就是:如果 (e.hash & oldCap) == 0,就放到原本的位置上。Hashmap 扩容流程?原创 2023-10-24 21:29:59 · 426 阅读 · 0 评论 -
解决 hash 冲突的办法有哪些?HashMap 用的哪种?
解决Hash冲突方法有:开放定址法、再哈希法、链地址法(拉链法)、建立公共溢出区。HashMap中采用的是。解决 hash 冲突的办法有哪些?HashMap 用的哪种?原创 2023-10-24 21:27:59 · 315 阅读 · 0 评论 -
HashMap 的底层数据结构是什么?
在JDK1.8 中,由“数组+链表+红黑树”组成:当链表过长,则会严重影响 HashMap 的性能,红黑树搜索时间复杂度是 O(logn),而链表是糟糕的 O(n)。在JDK1.7 中,由“数组+链表”组成:数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。● 当链表长度 > 8 && 数组长度 >= 64 才会转红黑树;其实这种情况,发生的概率很低。● 将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择。,而不是转换为红黑树,以减少搜索时间。原创 2023-10-24 21:27:06 · 310 阅读 · 0 评论 -
对于 HashMap 自己的理解
putVal(),getNode()方法,都是一上来就判断,头节点是不是我们要找的节点,比较 hash,key。因为哈希冲突,毕竟是发生概率很小的事情,大概率头节点就是我们要找的节点。至于后面,走红黑树的判断逻辑,去遍历链表,都是小概率事件了。通常我们的 Map 里面是不会存储这么多的数据的,所以通常情况下,并不会发生从链表向红黑树的转换。把 key 为 null 的 Node 节点放在了索引下标为 0 的地方。默认的数组容量为 16,默认的加载因子为 0.75 f。原创 2023-10-24 21:26:04 · 61 阅读 · 0 评论 -
谈谈 ArrayList
快速失败,modCount 用来记录 ArrayList 结构发生变化的次数,结构发生变化是指添加或者删除至少一个元素的操作,或者是调整内部数组的大小,仅仅只是设置元素的值不算结构发生变化。出于效率的考虑,数组可能长度100,但实际只用了50,剩下的50其实不用序列化,这样可以提高序列化和反序列化的效率,还可以节省内存空间。Arrays 工具类,内部有二分搜索,优化版本的快速排序,双轴快速排序,数组拷贝 copyof,数组填充 fill 等方法。原创 2023-10-24 21:21:49 · 110 阅读 · 0 评论