随笔分类 -  java集合源码分析

摘要:问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashSet支持按元素访问顺序排序吗? 源码分析 LinkedHashSet继承自HashSet,让我们直接 阅读全文
posted @ 2019-11-26 22:20 王大军 阅读(111) 评论(0) 推荐(0)
摘要:一、概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。 除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。 在实现上,Li 阅读全文
posted @ 2019-11-26 22:12 王大军 阅读(155) 评论(0) 推荐(0)
摘要:这个TreeSet其实和HashSet类似。HashSet底层是通过HashMap实现的,TreeSet其实底层也是通过TreeMap实现的。 简介 TreeSet的作用是保存无重复的数据,不过还对这些数据进行了排序。 TreeMap的底层是通过红黑树实现的,所以TreeSet底层也是通过红黑树实现 阅读全文
posted @ 2019-11-26 19:59 王大军 阅读(232) 评论(0) 推荐(0)
摘要:简介 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。TreeMap 阅读全文
posted @ 2019-11-26 16:28 王大军 阅读(234) 评论(0) 推荐(0)
摘要:概述 HashSet是基于HashMap来实现的, 底层采用HashMap的key来保存数据, 借此实现元素不重复, 因此HashSet的实现比较简单, 基本上的都是直接调用底层HashMap的相关方法来完成. package java.util; import java.io.InvalidObj 阅读全文
posted @ 2019-11-24 15:34 王大军 阅读(191) 评论(0) 推荐(0)
摘要:AbstractList AbstractList是实现List接口的抽象类,AbstractList抽象类与List接口的关系类似于AbstractCollection抽象类与Collection接口的关系。 AbstractList与AbstractCollection一样,也是通过提供一些方法 阅读全文
posted @ 2019-11-24 14:30 王大军 阅读(207) 评论(0) 推荐(0)
摘要:AbstractSet抽象类属于Set集合分支的顶层类,它继承了AbstractCollection,实现了Set接口。 public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> 这个抽象 阅读全文
posted @ 2019-11-24 10:39 王大军 阅读(417) 评论(0) 推荐(0)
摘要:简介 AbstractCollection是一个抽象类,它实现了Collection中除了iterator()和size()之外的所有方法。AbstractCollection的主要作用是方便其他类实现Collection.,比如ArrayList、LinkedList等。它们想要实现Collect 阅读全文
posted @ 2019-11-24 10:28 王大军 阅读(260) 评论(0) 推荐(0)
摘要:List和Set都是接口,它们继承与Collection。List是有序的队列,可以用重复的元素;而Set是数学概念中的集合,不能有重复的元素。List和Set都有它们各自的实现类。 为了方便,我们抽象出AbstractCollection类来让其他类继承,该类实现类Collection中的绝大部分 阅读全文
posted @ 2019-11-24 09:01 王大军 阅读(178) 评论(0) 推荐(0)
摘要:AbstractMap抽象类实现了一些简单且通用的方法,本身并不难。但在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以值的学习。 抽象类通常作为一种骨架实现,为各自子类实现公共的方法。上一篇我们讲解了Map接口,此篇对AbstractMap抽象类进行剖析研究。 Ja 阅读全文
posted @ 2019-11-23 17:41 王大军 阅读(211) 评论(0) 推荐(0)
摘要:Map接口 用于保存具有映射关系的数据结构,实现该接口的类可以通过键来获取对应的值。。 可以将给定一个键值对存储在Map接口的实现类实例中,如:map.put("key", "value"); 当访问的值不存在的时候,会抛出NoSuchElementException异常 当对象的类型和Map里元素 阅读全文
posted @ 2019-11-23 16:23 王大军 阅读(296) 评论(0) 推荐(0)
摘要:一、HashMap简介 1.1、HashMap概述 HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对<key,value>映射。此类不保证映射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作(get和put)提供稳定的性能。 1.2、HashMap在JDK1.8以前数 阅读全文
posted @ 2019-11-03 10:22 王大军 阅读(262) 评论(0) 推荐(0)
摘要:一、Vector简介 1.1、Vector概述 通过API中可以知道: 1)Vector是一个可变化长度的数组 2)Vector增加长度通过的是capacity和capacityIncrement这两个变量 3)Vector也可以获得iterator和listIterator这两个迭代器,并且他们发 阅读全文
posted @ 2019-10-31 17:01 王大军 阅读(245) 评论(0) 推荐(0)
摘要:1.1、LinkedList概述 LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的。 LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 阅读全文
posted @ 2019-10-31 14:25 王大军 阅读(202) 评论(0) 推荐(0)
摘要:1.1、ArrayList概述 1)ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类。 2)该类封装了一个动态再分配的Object[]数组,每一个类对象都有一个capacity属性,表示它们所封装的Object[]数组的长度,当向ArrayList中添加元素时,该属性值 阅读全文
posted @ 2019-10-30 19:32 王大军 阅读(312) 评论(0) 推荐(0)
摘要:package java.util; public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> { /** *唯一的构造函数。(对于子类构造函数的调用,通常是隐式的。) */ prot 阅读全文
posted @ 2019-10-30 13:00 王大军 阅读(230) 评论(0) 推荐(0)