
Java 集合类
AHU_
这个作者很懒,什么都没留下…
展开
-
Java集合源码剖析-Java集合框架
Hi大家好,我是清和二七,今天我们来聊聊《Java集合源码剖析-Java集合框架》一.层次关系 Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Col...原创 2017-12-31 22:14:21 · 6261 阅读 · 4 评论 -
EnumSet-Enumeration
EnumSetEnumSet 是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。EnumSet在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此EnumSet对象占用内存很小,而且运行效率很好原创 2018-01-19 01:36:21 · 262 阅读 · 0 评论 -
Java集合源码剖析-工具类
Java 工具类原创 2018-01-19 01:17:03 · 340 阅读 · 0 评论 -
Java集合源码剖析-HashSet源码剖析
从上述HashSet源代码可以看出,它其实就是一个对HashMap的封装而已。所有放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value则存储了一个PRESENT,它是一个静态的Object对象。HashSet的绝大部分方法都是通过调用HashMap的方法来实现的,因此HashSet和HashMap两个集合在实现本质上是相同的。根据HashMap的一个特性: 将一个key-value对放入HashMap中时,首先根据key的hashCode()返回值决定该E原创 2018-01-19 01:04:49 · 251 阅读 · 0 评论 -
Java集合源码剖析-LinkedHashmap源码剖析
先取得Entry,如果不为null,一样调用recordAccess方法,上面已经说得很清楚,这里不在多解释了。 7、最后说说LinkedHashMap是如何实现LRU的。首先,当accessOrder为true时,才会开启按访问顺序排序的模式,才能用来实现LRU算法。我们可以看到,无论是put方法还是get方法,都会导致目标Entry成为最近访问的Entry,因此便把该Entry加入到了双向链表的末尾(get方法通过调用recordAccess方法来实现,put方法在覆盖已有key的情况下,也是通原创 2018-01-13 00:12:14 · 209 阅读 · 0 评论 -
Java集合源码剖析-TreeMap源码剖析
TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,红黑树通过一些限制,使其不会出现二叉树排序树中极端的一边倒的情况,相对二叉排序树而言,这自然提高了查询的效率。原创 2018-01-12 23:53:40 · 219 阅读 · 0 评论 -
Java集合源码剖析-Hashtable源码剖析
Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。原创 2018-01-12 22:52:50 · 265 阅读 · 0 评论 -
Java集合源码剖析-Vector源码剖析
Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。 Vector没有实现Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAccess接口,支持快速随机访问。原创 2018-01-12 22:45:11 · 213 阅读 · 0 评论 -
Java集合源码剖析-HashMap源码剖析
一.概述 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接...原创 2018-01-01 01:49:03 · 280 阅读 · 0 评论 -
Java集合源码剖析-LinkedList源码剖析
LinkedList是基于双向循环链表实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。原创 2018-01-01 01:38:09 · 292 阅读 · 2 评论 -
Java集合源码剖析-ArrayList源码剖析
ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。 ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现原创 2018-01-01 01:08:03 · 494 阅读 · 1 评论 -
Comparable与Comparator分析
一.ComparableComparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么原创 2018-01-19 01:38:50 · 208 阅读 · 0 评论