Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by float loadFactor
Java 集合框架:Java 中的 Set 集合(HashSet & LinkedHashSet & TreeSet)特点与实现解析
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 017 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同学学习。当然,我也会在必要的时候进行相关技术深度的技术解读,相信即使是拥有多年 Java 开发经验的从业者和大佬们也会有所收获并找到乐趣。 – 相较于 List 集合与 Map 集合,Set 集合可以讨论的点其实很少,这主要的原因是因为无论是哪一种 Set 集合的实现类其实都是基于 Map 集合的,而如果深究其原理,其实就是去深究 Map 的实现,而我不打算对 Map 的解读放在 Set 的章节… 当然除了主要实现之外,Set 也是有很多值得我们关注的特点的,比如他的无序性,对并发流、序列化以及非序列化的实现,以及主要实现类...
Java 集合 - Map 接口
在日常生活和编程中,我们常常需要处理一种特殊的关系:一一对应的关系,如 IP 地址与主机名,身份证号与个人信息,系统用户名与系统用户对象等。这种关系被称为映射,在 Java 中,我们使用 Map<K, V> 接口来表达和处理这种关系。 java.util.Map<K, V> 是一个在 Java 集合框架中用于存储键值对的接口。键和值是一一对应的,键用于唯一标识一个元素,值则是与该键关联的数据。通过键,我们可以非常快速地找到其对应的值,这就是映射的核心特性。 相比于 Collection<E> 接口,Map<K, V> 接口有着根本的区别。Collection<E> 接口的实现类,如 List<E> 和 Set<E>,存储的是一组独立的元素。元素之间没有特定的关系,只是单纯地放在一起。而 Map<K, V> 接口则不同,它的元素以键值对的形式存在,每个元素由一个键和一个值组成,二者之间存在着一种映射关系。基于此,我们通常将 Collection<E> 的实现类称为单列集合,而将 Map<K, V> 的实现类称为双列集合。 在 Map...
死磕 java集合之HashSet源码分析
(2)HashSet怎么保证添加元素不重复? (3)HashSet是否允许null元素? (4)HashSet是有序的吗? (5)HashSet是同步的吗? (6)什么是fail-fast? 集合,这个概念有点模糊。 广义上来讲,java中的集合是指java.util包下面的容器类,包括和Collection及Map相关的所有类。 中义上来讲,我们一般说集合特指java集合中的Collection相关的类,不包含Map相关的类。 狭义上来讲,数学上的集合是指不包含重复元素的容器,即集合中不存在两个相同的元素,在java里面对应Set。 具体怎么来理解还是要看上下文环境。 比如,面试别人让你说下java中的集合,这时候肯定是广义上的。 再比如,下面我们讲的把另一个集合中的元素全部添加到Set中,这时候就是中义上的。 HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复。 属性 // 内部使用HashMap private transient HashMap<E,Object> map; // 虚拟对象,用来作为value放到map中 private...
Java Review - LinkedHashMap & LinkedHashSet 源码解读
2023-12-27 7 简介: Java Review - LinkedHashMap & LinkedHashSet 源码解读 Pre Java Review - HashMap & HashSet 源码解读 中我们讲了HashSet和HashMap 。 那同样的套路 , LinkedHashSet和LinkedHashMap在Java里也有着相同的实现,LinkedHashSet仅仅是对LinkedHashMap做了一层包装,也就是说LinkedHashSet里面有一个LinkedHashMap(适配器模式)。 故我们还是重点分析LinkedHashMap。 概述 LinkedHashMap实现了Map接口,即允许放入key为null的元素,也允许插入value为null的元素。 从名字上可以看出该容器是linked list和HashMap的混合体,也就是说它同时满足HashMap和linked list的某些特性。可将LinkedHashMap看作采用linked list增强的HashMap。 数据结构...
认真学习Java集合之LinkedHashMap的实现原理-阿里云开发者社区
【1】LinkedHashMap定义 LinkedHashMap是HashMap的子类,其实现与HashMap 的不同之处在于,LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap 相似,它通过重写父类相关的方法,来实现自己的链接列表特性。 注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。 虽然LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。 因此,根据链表中元素的顺序可以将LinkedHashMap分为:保持插入顺序的LinkedHashMap 和 保持访问顺序的LinkedHashMap,其中LinkedHashMap的默认实现是按插入顺序排序的。 顺序遍历和快速定位LinkedHashMap适合有加入顺序和快速定位的场景。...
认真研究Java集合之HashSet 的实现原理
HashSet 是 Set 接口的典型实现,由哈希表(实际上是一个HashMap 实例)支持,大多数时候使用 Set 集合时都使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。 【1】HashSet基础概念 HashSet 具有以下特点: 不能保证元素的排列顺序 HashSet 不是线程安全的 集合元素可以是 null 当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后通过 hashCode 值计算得到hash值决定该对象在 HashSet 中的存储位置。 HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。 HashSet类继承图 HashSet方法概览 hashCode()与equals()的相关规定 如果两个对象相等,则hashcode一定也是相同的。 两个对象相等,对两个对象分别调用equals方法都返回true。...
认真学习jdk1.7下ConcurrentHashMap的实现原理-阿里云开发者社区
HashMap无论是 1.7 还是 1.8 其实都能看出 JDK 没有对它做任何的同步操作,所以并发会出问题,甚至出现死循环导致系统不可用。这个问题就交给ConcurrentHashMap。 ConcurrentHashMap是一个 在juc包下的 map, 线程安全。 在jdk.1.8 之前采用数组+ 链表的结构 并且采用分段锁机制 来保证线程安全,而jdk1.8 改成了 数组+ 链表+ 红黑树,线程安全方面也改成了 cas+ synchronized 来保证线程安全。 ConcurrentHashMap类图如下: 本篇博文我们分析JDK1.7下ConcurrentHashMap的实现。 【1】核心属性和构造 这里可能对segmentMask、segmentShift以及segments比较疑惑,别着急我们慢慢往下看。 如下所示,从成员来讲与HashMap中的Entry类似,都是hash、key、value、next。不同的是这里value和next使用了volatile 修饰,保证其他线程能够读取到当前变量的最新值。而且其内部使用了安全类 UNSAFE来保证volatile...
阿里面试官:LinkedHashMap是怎么保证元素有序的?-51CTO.COM
2023-11-27 08:32:02 这其实跟HashMap的底层设计有关,HashMap并不是像ArrayList那样,按照元素的插入顺序存储。而是先计算key的哈希值,再用哈希值对数组长度求余,算出数组下标,存储到下标所在的位置,如果该位置上存在链表或者红黑树,再把这个元素插入到链表或者红黑树上面。 阿里的上下班时间是1095,这么忙也不能耽误更新《解读Java源码专栏》,在这个系列中,我将手把手带着大家剖析Java核心组件的源码,内容包含集合、线程、线程池、并发、队列等,深入了解其背后的设计思想和实现细节,轻松应对工作面试。 这是解读Java源码系列的第五篇,将跟大家一起学习Java中比较神秘的数据结构 - LinkedHashMap。 引言 新手程序员在使用HashMap的时候,会有个疑问,为什么存到HashMap中的数据不是有序的?...
java集合框架Set子接口之HashSet源码剖析-阿里云开发者社区
2023-10-08 19 简介: HashSet类实现了由哈希表(实际上是HashMap实例)支持的Set接口 , 底层采用HashMap来保存的数据 , 存在HashSet中的元素是无序且不重复的并且HashSet是线程不安全的 , 这种不重复其实是由HashMap实现的 , 所以HashSet的实现也是相对比较简单的 , 对于它的操作其实都是调用HashMap的方法来实现的 HashSet HashSet类实现了由哈希表(实际上是HashMap实例)支持的Set接口 , 底层采用HashMap来保存的数据 , 存在HashSet中的元素是无序且不重复的并且HashSet是线程不安全的 , 这种不重复其实是由HashMap实现的 , 所以HashSet的实现也是相对比较简单的 , 对于它的操作其实都是调用HashMap的方法来实现的 HashSet类结构图 HashSet基本属性 HashSet构造方法 loadFactor: 负载因子 , 用来计算HashMap扩容时的阈值 initialCapacity : HashMap的容量 HashMap的阈值计算公式 :...
9张图深入剖析ConcurrentHashMap_wx64f724a644006的技术博客_51CTO博客
在日常的开发中,我们经常使用key-value键值对的HashMap,其使用哈希表实现,用空间换取时间,提升查询性能 但在多线程的并发场景中,HashMap并不是线程安全的 如果想使用线程安全的,可以使用ConcurrentHashMap、HashTable、Collections.synchronizedMap等 但由于后面二者使用synchronized的粒度太大,因此一般不使用,而使用并发包中的ConcurrentHashMap 在ConcurrentHashMap中,使用volatile保证内存可见性,使得读场景下不需要“加锁”保证原子性 在写场景下使用CAS+synchronized,synchronized只锁哈希表某个索引位置上的首节点,相当于细粒度加锁,增大并发性能 本篇文章将从ConcurrentHashMap的使用,读、写、扩容的实现原理,设计思想等方面进行剖析 查看本文前需要了解哈希表、volatile、CAS、synchronized等知识 volatile可以查看这篇文章:5个案例和流程图让你从0到1搞懂volatile关键字...
九张图深入剖析ConcurrentHashMap-51CTO.COM
2023-09-28 21:37:41 在日常的开发中,我们经常使用key-value键值对的HashMap,其使用哈希表实现,用空间换取时间,提升查询性能。 前言 在日常的开发中,我们经常使用key-value键值对的HashMap,其使用哈希表实现,用空间换取时间,提升查询性能,但在多线程的并发场景中,HashMap并不是线程安全的。如果想使用线程安全的,可以使用ConcurrentHashMap、HashTable、Collections.synchronizedMap等。 但由于后面二者使用synchronized的粒度太大,因此一般不使用,而使用并发包中的ConcurrentHashMap在ConcurrentHashMap中,使用volatile保证内存可见性,使得读场景下不需要“加锁”保证原子性。 在写场景下使用CAS+synchronized,synchronized只锁哈希表某个索引位置上的首节点,相当于细粒度加锁,增大并发性能。...
ConcurrentHashMap底层源码分析 - 不会上猪的树 - 博客园
1.ConcurrentHashMap初始化 jdk8之后,ConcurrentHashMap采用了HashMap的底层结构(数据,链表,红黑树),在此基础上保障了线程安全问题. public ConcurrentHashMap() { } 无参构造 public ConcurrentHashMap(int initialCapacity) { if (initialCapacity < 0) throw new IllegalArgumentException(); int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ?
LinkedHashTable implementation in Java
HashTable HashTable is a data structure that maps keys to values. Any non-null object can be used as a key or as a value. HashTable vs HashMap HashMap is almost equivalent to HashTable, except the HashMap is not Synchronized and allow null values as key. LinkedHashMap LinkedHashMap is another Map implementation, where it maintain the insertion of entires. Implementation of LinkedHashTable By wrapping the LinkedHashMap, we can implement LinkedHashTable effectively.
ConcurrentHashMap 1.7与1.8的区别
ConcurrentHashMap 与HashMap和Hashtable 最大的不同在于:put和 get 两次Hash到达指定的HashEntry,第一次hash到达Segment,第二次到达Segment里面的Entry,然后在遍历entry链表 从1.7到1.8版本,由于HashEntry从链表 变成了红黑树所以 concurrentHashMap的时间复杂度从O(n)到O(log(n)) HashEntry最小的容量为2 Segment的初始化容量是16; HashEntry在1.8中称为Node,链表转红黑树的值是8 ,当Node链表的节点数大于8时Node会自动转化为TreeNode,会转换成红黑树的结构 JDK1.7版本:ReentrantLock+Segment+HashEntry JDK1.8版本:synchronized+CAS+HashEntry+红黑树 1.JDK1.8降低锁的粒度,JDK1.7锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry 2.JDK1.8使用红黑树来优化链表...
Java源码重读之ConcurrentHashMap详解_java_脚本之家
如果你没有阅读过 Java 源码重读系列之 HashMap 这篇文章的话,建议你先读一下。以下所有内容的前提是你已阅读过以上的文章。 另外,凡是涉及到多线程、并发的东西从来就没有简单的,所以这次我们很难讲清楚 ConcurrentHashMap 中的所有内容,只能聚焦到以下几个内容 ConcurrentHashMap 的 get 操作 ConcurrentHashMap 的 put 操作 ConcurrentHashMap 的 resize() 操作 ConcurrentHashMap 是如何保证线程安全的 如果你想要了解的内容不在以上范围内,那就不用继续阅读了,以免浪费时间~ 0.
Java并发源码分析ConcurrentHashMap线程集合_java_脚本之家
简介 ConcurrentHashMap是一个线程安全的集合,底层是通过对指定索引位置上的节点进行加锁,而不是对整个数组加锁,当一个线程对指定索引位置上的节点加了锁之后,其它线程就不能对该索引位置上的节点进行操作,但可以对其它的索引位置上的节点操作,ConcurrentHashMap与HashMap有许多相似的地方,ConcurrentHashMap只是在一些产生线程安全的地方加了锁,如果对HashMap了解的话,再来看ConcurrentHashMap就简单许多。 常量 /** 数组最大容量大小(1073741824) */ private static final int MAXIMUM_CAPACITY = 1 << 30; /** 默认的初始容量大小 */ private static final int DEFAULT_CAPACITY = 16; /** 默认的并发等级 */ private static final int DEFAULT_CONCURRENCY_LEVEL = 16; /** 负载因子 */ private static final float...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with float
Contact float, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack