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

1. LinkedHashMap简介 LinkedHashMap继承自HashMap,实现了Map接口. LinkedHashMap是HashMap的一种有序实现(多态,HashMap的有序态),可以说是HashMap的一种拓展,弥补了HashMap无序这一缺点,但它实现有序的代价是牺牲了时间和空间上的开销. LinkedHashMap的有序是通过维护一条双向链表保证了元素的有序性,除了有序这一点之外,LinkedHashMap和HashMap差不多,也就没有太多需要描述的了. 2. Linke…
1. LinkedHashSet简介 LinkedHashSet继承自HashSet,故拥有HashSet的全部API,LinkedHashSet内部实现简单,核心参数和方法都继承自HashSet,只是重写了spliterator一个方法. HashSet底层通过HashMap进行数据存储,而LinkedHashSet则是通过LinkedHashMap进行数据存储,故LinkedHashSet是一个有序的不可重复集合,非线程安全. 2. LinkedHashSet实现 //继承自HashSet,…
一.前言 在上一篇随笔中,我们分析了HashMap的源码,里面涉及到了3个钩子函数,用来预设给子类--LinkedHashMap的调用,所以趁热打铁,今天我们来一起看一下它的源码吧. 二.LinkedHashMap的结构与继承关系 2.1 LinkedHashMap的数据结构 可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点--before和后一个节点--after,从而将所有的节点已链表的形式串联一起来,从名字上来看Linked…
1. HashMap简介 HashMap是一种key-value结构存储数据的集合,是map集合的经典哈希实现. HashMap允许存储null键和null值,但null键最多只能有一个(HashSet就是以HashMap实现的,通过HashMap的key存储元素,所以HashSet也最多允许存储一个null值并且其中的元素不可重复). HashMap是非线程安全的实现,在多线程环境下会出现数据丢失的情况,与JDK1.8以前不同的是并不会出现死循环的情况.在多线程情况下最好使用Concurren…
1. HashSet简介 HashSet是一个不可重复的无序集合,底层由HashMap实现存储,故HashSet是非线程安全的,由于HashSet使用HashMap的Key来存储元素,而HashMap的Key可以允许有一个null值,所以HashSet是可以存储null值的. 由于HashSet的不可重复性,在项目开发中可以利用这一点进行元素去重,但前提是在不考虑线程安全的问题基础上. 2. HashSet的继承关系 HashSet继承自AbstractSet,实现了Set.Cloneable.…
参考文档: 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. 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两个首尾指针来决定的,正常理解的…
1. Vector简介 Vector是JDK1.0版本就推出的一个类,和ArrayList一样,继承自AbstractList,实现了List.RandomAccess.Cloneable.java.io.Serializable接口,底层也是基于数组实现的,不同的是它是一个线程安全的类. 2. Vector实现 1. 核心属性 //底层存储数组 protected Object[] elementData; //数组内实际存储元素个数 protected int elementCount; /…