java集合类源码解析
菜鸡小王子
这个作者很懒,什么都没留下…
展开
-
HashMap死循环问题
转载出自于JAVA HashMap的死循环在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(转载 2017-08-16 10:28:57 · 465 阅读 · 1 评论 -
ConcurrentLinkedQueue源码分析
最近一段时间在学习Java并发编程,研究了下AbstractQueuedSynchronizer、ConcurrentHashMap及本文涉及的ConcurrentLinkedQueue的实现。网上关于ConcurrentHashMap的源码分析很多,但关于ConcurrentLinkedQueue的源码分析较少。且随着时间推移,JDK对ConcurrentLinkedQueue的实现方式也进行了转载 2017-08-31 14:51:49 · 332 阅读 · 0 评论 -
ConcurrentHashMap源码分析1.8
一个重要属性:sizeCtlprivate transient volatile int sizeCtl;表示为hash表初始化或扩容时的一个控制位标识量。 负数代表正在进行初始化或扩容操作 -1代表正在初始化 -N 表示有N-1个线程正在进行扩容操作 -正数或0代表hash表还没有被初始化,这个数值表示初始化或下一次进行扩容的大小,这一点类似于扩容原创 2017-08-29 21:45:03 · 327 阅读 · 0 评论 -
ArrayList和LinkedList区别
1.ArrayList是实现了基于动态数组(Object[])的数据结构,LinkedList基于链表的数据结构(Node)。 2.ArrayList初始长度为10,扩容后为1.5*oldCapacity。3.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间(扩容后可调用trimTosize),而LinkedList的空间花费则体现在它的每一个元素都需要原创 2017-08-28 16:02:20 · 294 阅读 · 0 评论 -
CopyOnWriteArrayList
Copy-On-Write Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOn原创 2017-07-08 00:22:41 · 396 阅读 · 0 评论 -
Collections.synchronizedMap(map)
Collections中有个私有静态方法synchronizedMap,返回一个 线程安全的SynchronizedMap类。定义如下:public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { return new SynchronizedMap<K,V>(m); }SynchronizedMap类定义:private s原创 2017-07-07 00:26:51 · 1298 阅读 · 0 评论 -
map按key和value排序
TreeMap:默认按照key升序进行排序public static void main(String[] args) { TreeMap<String, Integer> map = new TreeMap<>(); map.put("b", 123); map.put("c", 24); map.put("a", 56);原创 2017-08-15 22:28:45 · 248 阅读 · 0 评论 -
PriorityQueue解析
转载出自于深入理解Java PriorityQueueJava中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。总体介绍前面以Java ArrayDeque为例讲解了Stack和Q转载 2017-08-15 16:01:01 · 440 阅读 · 0 评论 -
ArrayList源码解析(jdk1.6)
ArrayList 源码解析 jdk1.6版本原创 2017-07-03 21:02:59 · 603 阅读 · 0 评论 -
ConcurrentHashMap源码分析2(总结)
ConcurrentHashMap源码分析,加锁分析,小结原创 2017-07-07 15:32:11 · 697 阅读 · 0 评论 -
ConcurrentHashMap源码分析1
一、背景:线程安全的HashMap什么时候我们需要使用线程安全的hashmap呢,比如一个hashmap在运行的时候只有读操作,那么很明显不会有问题,但是当涉及到同时有改变也有读的时候,就要考虑线程安全问题了,在不考虑性能问题的时候,我们的解决方案有Hashtable或者Collections.synchronizedMap(hashMap)(注:可以是任何Map),这两种方式基本都是对整个hash转载 2017-07-05 22:58:25 · 219 阅读 · 0 评论 -
HashMap源码分析
一、HashMap的定义public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable可以看到HashMap实现了 1. 接口Cloneable,用于表明HashMap对象会重写java.lang.Object的clone()方法,HashM原创 2017-07-04 17:38:02 · 313 阅读 · 0 评论 -
HashMap的jdk1.8分析
HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。转载 2017-07-11 17:41:22 · 240 阅读 · 0 评论 -
Iterator原理(jdk1.8)
Iterator用于遍历集合中的元素,适用于不知道集合内部结构的情况。用户不再与集合类交互,而是与Iterator交互,其清楚知道集合类的内部状态,通过控制iterator达到遍历集合的目的。Iterator接口:public interface Iterator { boolean hasNext(); E next(); default void remov原创 2017-09-18 22:26:50 · 1107 阅读 · 0 评论