学习JDK1.8集合源码之--HashMap】的更多相关文章

1. HashMap简介 HashMap是一种key-value结构存储数据的集合,是map集合的经典哈希实现. HashMap允许存储null键和null值,但null键最多只能有一个(HashSet就是以HashMap实现的,通过HashMap的key存储元素,所以HashSet也最多允许存储一个null值并且其中的元素不可重复). HashMap是非线程安全的实现,在多线程环境下会出现数据丢失的情况,与JDK1.8以前不同的是并不会出现死循环的情况.在多线程情况下最好使用Concurren…
一.前言 笔者之前看过一篇关于jdk1.8的HashMap源码分析,作者对里面的解读很到位,将代码里关键的地方都说了一遍,值得推荐.笔者也会顺着他的顺序来阅读一遍,除了基础的方法外,添加了其他补充内容. 二.HashMap结构概览 以下是HashMap的数据结构: 不同于之前的jdk的实现,1.8采用的是数组+链表+红黑树,在链表过长的时候可以通过转换成红黑树提升访问性能.大多数情况下,结构都以链表的形式存在,所以检查是否存在树节点会增加访问方法的时间,但是相较于其优点来说还是可以接受的. 三.…
1. LinkedHashSet简介 LinkedHashSet继承自HashSet,故拥有HashSet的全部API,LinkedHashSet内部实现简单,核心参数和方法都继承自HashSet,只是重写了spliterator一个方法. HashSet底层通过HashMap进行数据存储,而LinkedHashSet则是通过LinkedHashMap进行数据存储,故LinkedHashSet是一个有序的不可重复集合,非线程安全. 2. LinkedHashSet实现 //继承自HashSet,…
1. HashSet简介 HashSet是一个不可重复的无序集合,底层由HashMap实现存储,故HashSet是非线程安全的,由于HashSet使用HashMap的Key来存储元素,而HashMap的Key可以允许有一个null值,所以HashSet是可以存储null值的. 由于HashSet的不可重复性,在项目开发中可以利用这一点进行元素去重,但前提是在不考虑线程安全的问题基础上. 2. HashSet的继承关系 HashSet继承自AbstractSet,实现了Set.Cloneable.…
1. WeakHashMap简介 WeakHashMap继承自AbstractMap,实现了Map接口. 和HashMap一样,WeakHashMap也是一种以key-value键值对的形式进行数据的存储,底层存储结构为数组加链表,并且键值都可以为null.与HashMap不同的是,WeakHashMap实现了弱引用,当一个key不再正常使用时,会从WeakHashMap中自动移除,被GC回收并存入ReferenceQueue中.而这一特点主要是通过ReferenceQueue加WeakRefe…
1. ArrayDeque简介 ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,ArrayDeque是非线程安全的,Stack是线程安全的. ArrayDeque虽然是基于数组实现的,但很容易被数组这种数据结构所迷惑.因为数组是从0开始到length-1位置结束的,但ArrayDeque的实现实际上是一种循环结构的队列,首尾位置完全靠head和tail两个首尾指针来决定的,正常理解的…
参考文档: https://cloud.tencent.com/developer/article/1145014 https://segmentfault.com/a/1190000018578944 http://www.importnew.com/9928.html https://blog.csdn.net/zero__007/article/details/52166306 1. ArrayList简介 ArrayList底层基于数组实现的一种线性数据结构,通过数组的索引原理实现了快速…
1. TreeMap简介 TreeMap继承自AbstractMap,实现了NavigableMap.Cloneable.java.io.Serializable接口.所以TreeMap也是一个key-value结构的Map集合,并且提供了搜索导航及排序功能,能够被克隆以及支持序列化操作. TreeMap是基于红黑树实现的有序key-value集合,可以对元素进行自动排序,排序的规则可以是自然排序也可以是实现Comparable接口指定排序方式. 由于红黑树的查找.插入和删除的时间复杂度都是O(…
1. LinkedHashMap简介 LinkedHashMap继承自HashMap,实现了Map接口. LinkedHashMap是HashMap的一种有序实现(多态,HashMap的有序态),可以说是HashMap的一种拓展,弥补了HashMap无序这一缺点,但它实现有序的代价是牺牲了时间和空间上的开销. LinkedHashMap的有序是通过维护一条双向链表保证了元素的有序性,除了有序这一点之外,LinkedHashMap和HashMap差不多,也就没有太多需要描述的了. 2. Linke…
1. Vector简介 Vector是JDK1.0版本就推出的一个类,和ArrayList一样,继承自AbstractList,实现了List.RandomAccess.Cloneable.java.io.Serializable接口,底层也是基于数组实现的,不同的是它是一个线程安全的类. 2. Vector实现 1. 核心属性 //底层存储数组 protected Object[] elementData; //数组内实际存储元素个数 protected int elementCount; /…