java常用集合
java常用集合
viqiang1991
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap 实现原理
由于HashMap是一个线程不安全的容器,主要体现在容量大于总量*负载因子发生扩容时会出现环形链表从而导致死循环。因此需要支持线程安全的并发容器ConcurrentHashMap。(1)JDK1.7 实现数据结构由Segment数组、HashEntry数组组成,和HashMap一样,仍然是数组加链表组成。ConcurrentHashMap采用了分段锁技术,其...原创 2020-02-22 09:56:15 · 168 阅读 · 0 评论 -
LinkedHashMap 底层分析
众所周知HashMap是一个无序的Map,因为每次根据key的hashcode映射到Entry数组上,所以遍历出来的顺序并不是写入的顺序。因此 JDK 推出一个基于HashMap但具有顺序的LinkedHashMap来解决有排序需求的场景。它的底层是继承于HashMap实现的,由一个双向链表所构成。LinkedHashMap的排序方式有两种:根据写入...原创 2020-02-23 16:29:41 · 175 阅读 · 0 评论 -
HashSet
HashSet是一个不允许存储重复元素的集合.首先了解下HashSet的成员变量:private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESE...原创 2020-02-23 16:15:54 · 88 阅读 · 0 评论 -
HashMap 底层分析
以下基于 JDK1.7 分析。HashMap 底层是基于数组和链表实现的。其中有两个重要的参数:容量 负载因子容量的默认大小是 16,负载因子是 0.75,当HashMap的size > 16*0.75时就会发生扩容(容量和负载因子都可以自由调整)。put 方法首先会将传入的 Key 做hash运算计算出 hashcode,然后根据数组长度取模计算出在数组...原创 2020-02-23 11:48:33 · 93 阅读 · 0 评论 -
LinkedList 底层分析
LinkedList底层是基于双向链表实现的,也是实现了List接口,所以也拥有 List 的一些特点(JDK1.7/8 之后取消了循环,修改为双向链表)。新增方法public boolean add(E e) { linkLast(e); return true; } /** * Links e as last elem...原创 2020-02-23 11:50:40 · 259 阅读 · 0 评论