Java8容器
文章平均质量分 82
潘威威
这个作者很懒,什么都没留下…
展开
-
Java8容器源码-目录
从今天开始,就要开始学习Java容器了。本专栏从了解到使用再到源码,详细深入地讲解Java容器(集合)。本专栏主要参考《Think In Java》一书,还有网上的一些技术文章。主要讲解Java容器的使用、源码、优缺点。个人能力有限,难免有考虑不到的地方,如果有哪里不正确,欢迎指出。本专栏参考的JDK版本为1.8。目录目录会随着本专栏的更新而更新。Java8容器源码-...原创 2017-08-01 20:34:18 · 6326 阅读 · 5 评论 -
Java8源码-ArrayList
今天开始学习ArrayList源码。参考的JDK版本为1.8。相信大家对ArrayList的使用已经很熟悉了,但你真的了解ArrayList吗?ArrayList源码中注释的第一行是“Resizable-array implementation of the List interface”,意为“List接口的可变长数组实现”。ArrayList是如何实现可变长的?ArrayList有哪些私有...原创 2017-08-06 21:37:03 · 13101 阅读 · 14 评论 -
Java8源码-WeakHashMap
前段时间学习了HashMap,HashTable,LinkedHashMap,今天学习WeakHashMap,参考的JDK版本为1.8。WeakHashMap和HashMap相似,也是哈希表的实现,以键值对的形式存储数据,key和value都可以为null。不同的是WeakHashMap的键为“弱键”。什么是“弱键”?弱键会对WeakHashMap产生什么影响?“弱键”是如何实现的?本文会通过...原创 2017-08-25 21:04:01 · 1658 阅读 · 2 评论 -
Java8源码-Vector
前几天学习了ArrayList源码和迭代器模式在ArrayList源码中的使用,今天开始学习Vector源码。参考的JDK版本为1.8。相信大家对Vector的使用已经很熟悉了,它和ArrayList的最大的不同是它是线程安全的,这点在Vector源码中也有说明。Vector源码中注释有这么一句“Vector is synchronized. If a thread-safe impleme...原创 2017-08-09 21:17:06 · 8422 阅读 · 1 评论 -
Java8源码-LinkedList
前几天学习了ArrayList源码和Vector源码和迭代器模式在它们源码中的使用,今天开始学习LinkedList源码。参考的JDK版本为1.8。LinkedList和ArrayList与Vector同样实现了List接口,但它执行某些操作如插入和删除元素操作比ArrayList与Vector更高效,而随机访问操作效率低。除此之外,LinkedList还添加了可以使其用作栈、队列或双端队列的...原创 2017-08-12 20:21:40 · 3776 阅读 · 1 评论 -
Java8源码-HashMap
前面已经学习了List的实现类并做了总结,今天开始学习HashMap源码。参考的JDK版本为1.8。相信大家对HashMap的使用已经很熟悉了,它和List的最大的不同是它是以key-value的形式存储数据的。HashMap是如何保存和处理key-value键值对的?本文将分析HashMap的内部结构及实现原理,帮助大家更好的使用它。数据结构在分析HashMap源码之前,有必要了...原创 2017-08-19 20:38:27 · 5640 阅读 · 1 评论 -
Java8源码-Hashtable(2)
上一篇文章翻译了Hashtable源码顶部注释,本文将详细讲解Hashtable的各个方法的实现。Hashtable层次结构图先来看看Hashtable的定义: public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io...原创 2017-08-21 19:04:54 · 2430 阅读 · 1 评论 -
Java8源码-LinkedHashMap
前面已经学习了HashMap源码和Hashtable源码,今天开始学习LinkedHashMap。参考的JDK版本为1.8。LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现。哈希表的功能通过继承HashMap实现了。LinkedHashMap还维护着一个双重链接链表。此链表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。本文主要讲解双重链接链表的部分,...原创 2017-08-23 20:23:46 · 2174 阅读 · 2 评论 -
Java8源码-TreeMap
前几天学习了HashMap、Hashtable、LinkedHashMap、WeakHashMap,今天开始学习TreeMap。TreeMap是Map接口基于红黑树的实现,键值对是有序的。本文主要讲解关于红黑树实现的部分。部分顶部注释 A Red-Black tree based NavigableMap implementation. The map is sorted ac...原创 2017-08-28 21:20:34 · 2415 阅读 · 0 评论 -
Java8源码-HashSet
今天开始学习HashSet。HashSet是依赖于HashMap的Set接口的实现,实际上是个HashMap的实例。如果对HashMap源码很熟悉,那么学习HashSet就会很简单了。HashSet的特点是不保证set的迭代顺序,特别是它不保证该顺序恒久不变,允许使用null 元素。本文将从数据结构、实现原理、源码等多个方面详细讲解HashSet。数据结构HashSet是依赖于Hash...原创 2017-08-29 21:15:08 · 1921 阅读 · 0 评论 -
Java8源码-Set整体架构
前面一段时间,我们已经对List和Map的实现类进行了学习和总结。接下来,我们开始学习Set。相信学习了Map之后,学习Set会容易很多。本文主要介绍Set的整体结构。Set的整体结构Set接口继承了Collection接口。特点是不保存重复的元素。AbstractSet是一个抽象类,它继承于AbstractCollection,实现了Set。AbstractCollect...原创 2017-08-29 19:05:57 · 1766 阅读 · 0 评论 -
Java8源码-Map总结
前段时间已经学习了HashMap、Hashtable、LinkedHashMap、WeakHashMap、TreeMap的数据结构、实现原理、源码等等。下面LZ就Map的这几个实现类做一个简单的总结原创 2017-08-29 19:00:19 · 1399 阅读 · 0 评论 -
Java8源码-Map整体架构
前面已经学习了List的实现类并做了总结,接下来学习Map的实现类。原本想学习Set,可仔细一想,Set的某些实现类如HashSet实现是基于HashMap的,TreeSet的实现也依赖于TreeMap。所以就决定先学习Map。本文主要介绍Map的整体结构,并简单介绍结构中的接口和抽象类。原创 2017-08-15 18:50:03 · 2927 阅读 · 0 评论 -
ArrayList与迭代器模式
本文主要讲解迭代器模式在ArrayList源码中的使用。迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的各个元素,而不用暴露这个对象的内部表示。在Java中,ArrayList的迭代器有两种:Iterator和ListIterator。Iterator迭代器是一个用来遍历并选择序列中的对象。Java的Iterator的只能单向移动。例子在写...原创 2017-08-09 08:26:32 · 5647 阅读 · 0 评论 -
Vector与迭代器模式
本文主要讲解迭代器模式在Vector源码中的使用。参考的JDK版本为1.8。迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的各个元素,而不用暴露这个对象的内部表示。在Java中,Vector的迭代器有两种:Iterator和ListIterator。值得一提的是,elements()方法也能实现类似迭代器的效果。为什么已经有了迭代器,还特意在Vector中新增了e...原创 2017-08-10 19:22:38 · 2357 阅读 · 1 评论 -
Iterator与Enumeration
Iterator已经实现了对容器的遍历了,Enumeration的存在有什么意义呢?Iterator和Enumeration有什么相同点和不同点?Enumeration提供了哪些方法?如何使用?在Java容器中是如何实现的?本文将一一回答这些问题。原创 2017-08-11 20:15:34 · 2020 阅读 · 0 评论 -
Java容器-整体结构
为什么需要Java容器通常,程序总是在运行时才能确定要创建的对象的数量,甚至是对象的类型。为了解决这个问题,需要在任意时刻任意位置创建任意数量的对象。大多数语言都提供某种方法来解决这个问题,Java使用容器来解决这个问题。容器也称集合类,基本的类型是List、Set、Queue、Map,但由于Java类库中使用了Collection关键字来代表某一接口,所以一般用容器来称呼这些集合...原创 2017-08-03 14:06:20 · 4038 阅读 · 2 评论 -
LinkedList与迭代器模式
本文主要讲解迭代器模式在LinkedList源码中的使用。参考的JDK版本为1.8。迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的各个元素,而不用暴露这个对象的内部表示。在Java中,LinkedList的迭代器有三种:Iterator、ListIterator、DescendingIterator。其中DescendingIterator与Iterator只能...原创 2017-08-14 18:39:37 · 1530 阅读 · 0 评论 -
Java8源码-详解fail-fast
细心地朋友看Java容器源码时一定会发现在list()和listIterator()的注释中都有一句话: The iterators returned by this class’s iterator and listIterator methods are fail-fast.我看ArrayList源码没认真想fail-fast是什么意思,看Vector源码时又看到了这个词,而且...原创 2017-08-11 13:11:27 · 4571 阅读 · 0 评论 -
Java8源码-Stack
学完了ArrayList、Vector、LinkedList的源码后,今天来学习Stack源码。参考的JDK版本为1.8。Stack继承了Vector,学习了Vector再来学习Stack就变得很简单。Stack,栈,特点是先进后出(FILO, First In Last Out)。Stack是如何实现先进后出的?本文将详细讲解这个问题。顶部注释 The Stack class...原创 2017-08-14 20:53:56 · 2502 阅读 · 0 评论 -
Java8源码-Hashtable(1)
前面已经学习了HashMap的源码,今天开始学习Hashtable。参考的JDK版本为1.8。(ps:以前都没注意到Hashtable中的t是小写的。。。)相信大家对Hashtable已经有所了解了,Hashtable和HashMap,从存储结构和实现来讲基本上都是相同的。它和HashMap的最大的不同是它是线程安全的,另外它不允许key和value为null。Hashtable是个过时的集合...原创 2017-08-20 14:14:46 · 2322 阅读 · 2 评论 -
Java8源码-List总结
前面我们已经学习了ArrayList、Vector、LinkedList、Stack的源码,现在我们来对List做个简单的总结。List整体结构先来回顾一下List的整体结构List以线性方式存储元素,集合中可以存放重复对象,元素有序。 最常用实现类:ArrayList:随机访问元素快,增删元素慢。Vector:Vector与ArrayList相似。但Vector的...原创 2017-08-14 22:36:51 · 1602 阅读 · 0 评论 -
Java8源码-TreeSet
昨天已经学习了HashSet,今天开始学习TreeSet。TreeSet是依赖于TreeMap的NavigableSet接口的实现,实际上是个TreeMap的实例。如果对TreeMap源码很熟悉,那么学习TreeSet就会很简单了。TreeSet的特点是使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。本文将从数据结构、实现原理、源码等多个方面详细讲解Tre...原创 2017-08-30 21:24:05 · 1612 阅读 · 0 评论