![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
容器
文章平均质量分 72
java容器相关
屁颠屁颠过日子
这个作者很懒,什么都没留下…
展开
-
容器 - ConcurrentHashMap
两者的区别主要体现在实现线程安全的方式上不同。首先将数据分段存储,然后给每个分段数据配一把锁,当一个线程锁访问其中一个段数据时,其他段也能被其他线程访问。ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。Segment 继承自 ReentrantLock, 是一种可重入锁,并发度与 Segment 数量相等。HashEntry是内部类,用于存储键值对数据。其成员变量value,和 HashEntry<K,V> next都由volatile修饰。原创 2024-04-11 20:50:38 · 930 阅读 · 0 评论 -
容器 - 跳跃表
跳表的本质是同时维护了多个链表,并且链表是分层的,最低层的链表维护了跳表内所有的元素,每上面一层链表都是下面一层的子集。跳表内的所有链表的元素都是排序的。当在跳表中插入数据的时候,同时将这个数据插入到部分索引层中,如何选择索引层,可以通过一个随机函数来决定这个节点插入到哪几级索引中,比如随机生成了k,那么就将这个索引加入到,第一级到第k级索引中。的思想,通过构建多级索引来提高查询效率,实现基于链表的“二分查找”,跳表是一种动态的数据结构,支持快速的查找、插入和删除操作,时间复杂度是 O(logn)。原创 2024-04-11 20:31:19 · 398 阅读 · 0 评论 -
容器 - LinkedList源码
LinkedList是一个实现了List接口和Deque接口的双端链表。LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性;LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法:Node类:LinkedList的私有内部类,用以表示一个链表节点。E item;//节点值//后继节点//前驱节点。原创 2024-04-11 20:20:07 · 202 阅读 · 0 评论 -
容器 - ArrayList源码解析
【代码】容器 - ArrayList源码解析。原创 2024-04-11 19:42:02 · 273 阅读 · 0 评论 -
容器 -- HashMap 源码解析
1. HashMap 简介HashMap 主要用来存放键值对,基于哈希表的Map接口实现,JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表是为了解决哈希冲突。JDK1.8 以后,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)。2. 底层数据结构分析:JDK1.8 之前 HashMap 底层是 数组和链表 结合。HashMap 通过 key原创 2020-06-01 14:24:27 · 86 阅读 · 1 评论 -
容器 -- 常见面试题
1. list集合的哪一种遍历方式要快一些下面时间是自己测试所得,不同情况时间不一致,但相对大小关系应该不变ArrayList普通for循环:3ms 迭代器:6msLinkedList普通for循环:6295ms 迭代器:28ms原因:接口RandomAccess中内容是空的,只是作为标记用。ArrayList实现了该接口,可随机访问,而LinkedList 没有。利用instanceof 来判断哪个实现了RandomAccess(通过语句 list instanceof Rand.原创 2020-06-01 15:00:42 · 548 阅读 · 0 评论