
吃透Java集合
java集合相关知识
吃透Java
专注Java技术,每天都要努力一点点
展开
-
吃透Java集合系列十二:TreeMap
一:TreeMap整体认识我们知道HashMap,它保证了以O(1)的时间复杂度进行增、删、改、查,从存储角度考虑,这两种数据结构是非常优秀的。但是HashMap还是有自己的局限性----它不具备统计性能,或者说它的统计性能时间复杂度并不是很好才更准确,所有的统计必须遍历所有Entry,因此时间复杂度为O(N)。比如Map的Key有1、2、3、4、5、6、7,我现在要统计:所有Key比3大...原创 2019-10-22 16:13:56 · 771 阅读 · 0 评论 -
吃透Java集合系列十一:LinkedHashMap
概述HashMap是Java集合中的重要成员,也是Map族中我们最为常用的一种,但是HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保持插入顺序的Map。庆幸的是,JDK为我们解决了这个问题,它为HashMap提供了一个子类 —— LinkedHas...原创 2019-10-20 16:03:52 · 381 阅读 · 0 评论 -
吃透Java集合系列十:HashTable
一:整体实现HashTable和HashMap实现大致相同,都是基于哈希表来实现的,数组+链表的形式(和HashMap有稍微的区别,HashMap加入了红黑树),它存储的内容是键值对(key-value)映射。Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。Dictionary是一个过时的键值对映射的抽象类,jd...原创 2019-10-19 11:35:00 · 491 阅读 · 0 评论 -
吃透Java集合系列九:HashMap
一:HashMap的整体实现HashMap是由Hash表来实现的,数组+链表(1.8加入红黑树)的方式实现的,通过key的hash值与数组长度取余来获取应插入数组的下标,如果产生Hash冲突,在原下标位置转为链表,当链表长度到达8并且数组长度大于等于64则转为红黑树。通过以上描述我们提以下问题:1、什么是Hash表我们知道数组的特点是:寻址容易,插入和删除困难。链表的特点是:寻址困难,插...原创 2019-10-16 20:40:08 · 502 阅读 · 1 评论 -
吃透Java集合系列八:Map
Map接口分析关于Map接口,JDK是这样描述的:Map是一个有键值对映射的对象,map不能包含相同的key,每一个key至多能映射一个value。Map替代了Dictionary这个类,Dictionary是抽象类而非接口,替代原因:接口总是优于抽象类。Map接口提供了3个集合视图,包括:keys的set集合, values的集合;,key-value的set集合,注意:values集...原创 2019-10-10 21:07:54 · 349 阅读 · 0 评论 -
吃透Java集合系列七:PriorityQueue
一:PriorityQueue实现方式Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。二:源码分析重要变量以及构造函数根据堆的特性,存储结...原创 2019-10-09 20:38:49 · 470 阅读 · 0 评论 -
吃透Java集合系列六:HashSet、LinkedHashSet和TreeSet
一:HashSetpublic class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.SerializableHashSet 继承于AbstractSet 该类提供了Set 接口的骨架实现,以最大限度地减少实现此接口所需的工作量。实现Set接口...原创 2019-10-07 12:58:06 · 1277 阅读 · 0 评论 -
吃透Java集合系列五:Vector和Stack
一:Vector分析Vector 是线程安全的动态数组,同 ArrayList 一样继承自 AbstractList 且实现了 List、RandomAccess、Cloneable、Serializable 接口。内部实现依然基于数组,Vector 与 ArrayList 基本是一致的,唯一不同的是 Vector 是线程安全的,会在可能出现线程安全的方法前面加上 synchronized 关...原创 2019-10-06 18:50:16 · 718 阅读 · 0 评论 -
吃透Java集合系列四:LinkedList
前言本篇作为吃透java集合系列第四篇,主要来了解一下LinkedList,通过本篇你将了解到如下:1、LinkedList的List特性2、LinkedList的Queue特性一:LinkedListLinkedList类是List接口的实现类,它是一个集合,可以根据索引来随机的访问集合中的元素,还实现了Deque接口,它还是一个队列,可以当成双端队列来使用。虽然LinkedList...原创 2019-10-05 12:29:40 · 487 阅读 · 1 评论 -
吃透Java集合系列三:ArrayList
前言本篇作为吃透Java集合系列第三篇,我们来看一下ArrayList,通过本篇我们要明白如下问题:1、ArrayList扩容机制2、ArrayList迭代器实现3、fail-fast机制4、ArrayList序列化机制一:ArrayList扩容机制...原创 2019-09-30 17:02:22 · 2884 阅读 · 2 评论 -
吃透Java集合系列二:Collection与其子接口
/** * 集合层次结构中的根接口。一个集合代表一组对象,被称为元素。 * 一些集合允许重复的元素,而有些则不允许。一些是有序的,另一些是无序的。 * JDK没有提供这个接口的任何直接的实现:它提供更具体的子接口像 Set和 List实现。 * * 所有通用的Collection实现类(通常通过其子接口间接实现Collection)应该提供两个“标准”构造函数: * void(无参数...原创 2019-09-29 17:58:25 · 719 阅读 · 0 评论 -
吃透Java集合系列一:Iterable和Iterator
前言:作为吃透Java集合的开篇,我们从集合的最顶层接口(Iterable)撸起,通过本篇我们要明白三个问题:1、什么是Iterable2、什么是Iterator3、Iterable和Iterator有什么关系一:什么是IterableJDK描述:实现此接口允许对象成为“ for-each循环”语句的目标。那么什么是“ for-each循环”:“ for-each循环”是Java提供...原创 2019-09-26 20:45:44 · 1923 阅读 · 1 评论