java源码分析
文章平均质量分 78
sanwishe
这个作者很懒,什么都没留下…
展开
-
java源码阅读之LinkedList
LinkedList是List接口的双向链表实现。它继承了AbstractSequentialList抽象类,这个抽象类我们在AbstractList中讨论过,AbstractSequentialList用于抽象“循序访问”的集合。LinkedList还实现了List接口和Deque接口,List接口大家都很熟悉,Deque接口用来表示一个两端可操作的线性集合,是“Double ended Que原创 2017-12-20 19:20:49 · 199 阅读 · 0 评论 -
java源码阅读之TreeMap
先看看TreeMap的继承关系: TreeMap是一个基于“红黑树”实现的导航映射(NavigableMap)。其映射的Key根据自然顺序排列,或者根据映射创建时提供的比较器排列。 由于TreeMap继承了SortedMap,这要求TreeMap的key必须是可比较的:要么提供compareTo()方法(实现Comparable)接口,要么在映射初始化的时候提供比较器。主意,TreeM...原创 2018-01-17 00:13:16 · 252 阅读 · 0 评论 -
java源码阅读之LinkedHashSet
LinkedHashSet是基于LinkedList实现的HashSet。 它与HashSet的区别在于LinkedHashSet内部维护了一个双向链表,这个链表用来记录HashSet的迭代顺序。通常的迭代顺序就是元素的插入顺序,但如果一个元素重复插入,则其迭代顺序不会改变。如果需要接受输入并返回其有顺序的拷贝,则可以考虑使用LinkedHashSet。LinkedHashSet提供了所有可选的S原创 2017-12-28 23:29:51 · 219 阅读 · 0 评论 -
java源码分析之HashSet
HashSet实现了Set接口,由一个哈希表(实际上是一个HashMap实例)缓存数据。对Set的迭代没有保证元素顺序,特别是不能保证订单会随着时间的推移而保持不变。HashSet允许null元素。 遍历HasHSet需要的时间与HashSet实例的大小(元素数量)加上支持HashMap实例的“容量”(桶的数量)的总和成正比。因此,如果迭代性能很重要,不要将初始容量设置得太高(或者负载因子太低)。原创 2017-12-21 00:20:52 · 176 阅读 · 0 评论 -
Java源码阅读之ArrayDeque
Deque接口的可调整大小的实现。 Arraydeque没有容量限制,可以根据需要增长容量以支持使用。 ArrayDeque是线程不安全的,在没有外部同步的情况下,不支持多线程的并发访问。 ArrayDeque不支持null元素。 当用作堆栈时,ArrayDeque可能比Stack快,在用作队列时比LinkedList快。 和LinkedList、ArrayList一样,ArrayDeque的迭代原创 2017-12-20 23:30:15 · 237 阅读 · 0 评论 -
java源码阅读之Spliterator
Spliterator是java 8才开始提供的一个迭代器实现,从名称可以看出来,Spliterator是一个可分割的迭代器,用来分割和迭代给定源的元素,这里的源可以是collection,array和io等。 spliterator的特别之处在于,它可以通过trySplit()方法,将spliterator实例分割成多个较小的spliterator实例,方便多线程并发处理。spliterator原创 2017-12-28 23:55:15 · 2038 阅读 · 1 评论 -
jdk源码阅读之AbstractList
AbstractList继承了AbstractCollection, 实现了List接口。它提供了实现“随机访问”的List的一些方法。可以最大限度的减少实现随机访问的数据存储(如LinkList)的工作量,而如果需要实现随机访问的List(如ArrayList)则最好使用AbstractList。AbstractList在Java Collection Framework中的位置如下图示,j原创 2017-12-16 20:06:27 · 245 阅读 · 0 评论 -
jdk源码阅读之ArrayList
ArrayList是我们java编码过程中最常用的集合类型。它在java collection framework中的位置如下: ArrayList是List的可变大小实现,它实现了List的所有可选操作,允许所有元素,包括null。其内部使用一维数组存储数据,因此可以通过索引随机访问。size(), isEmpty(), get(), set(), iterator() 和listIte原创 2017-12-17 18:09:33 · 214 阅读 · 0 评论 -
Java源码阅读之LinkedHashMap
顾名思义,LinkedHashMap是基于链表实现的有序的HashMap。LinkedHashMap内部维护了一个双向链表,链表定义了其元素迭代的顺序,通常的顺序就是元素被插入到LinkedHashMap的顺序。 LinkedHashMap摒弃了HashMap的乱序问题,同时也不像TreeMap一样有较高的开销。LinkedHashMap可以用于生成和原始Map顺序一样的拷贝,它提供了一个可以传原创 2017-12-28 00:03:19 · 161 阅读 · 0 评论 -
Java源码阅读之HashMap
HashMap是基于哈希表的Map实现,它提供了所有可选的映射操作,并允许空value和空key。(HashMap类似于Hashtable, 除了HashMap是线程不安全的,并允许null)。HashMap不保证映射顺序,而且也不保证顺序在一段时间内保持不变。 HashMap的迭代需要与其实例的容量(Hash桶数)与其size(键值映射数)成比例。因此,如果迭代性能很重要,就不要将初始容量设置...原创 2017-08-13 01:36:36 · 195 阅读 · 0 评论 -
java源码阅读之ThreadPoolExecutor
概述先看一下ThreadPoolExecutor的继承关系: 线程池ThreadPoolExecutor主要用来解决两个问题:通过减少每个任务的调度开销,从而提高大量异步任务执行效率提供了一种管理和限制资源(如线程)的方法此外线程池也提供给了一些基本的统计信息,如完成的任务数等。线程池有以下好处:降低资源消耗:通过重用已经创建的线程来降低线程创建和销毁的消耗提高响应...原创 2018-04-07 17:48:10 · 216 阅读 · 0 评论