Java源码学习
我不掉头发
知其然,后知其所以然
展开
-
Java容器类源码学习-Hashtable(十一)
一、介绍 最近变的不太愿意翻译官方介绍了,看过源码的都懂,除了特性介绍,剩下的每个容器类都基本一致。所以这里就说下既然都有的HashMap了,为啥还要来个Hashtable? 我也不晓得,哈哈。说说区别吧: HashMap线程不安全,Hashtable线程安全(方法带锁 synchronized)。 底层实现还是不一样的,但是用起来,Hashtable有HashMap的感觉,当遇到key值的ha...原创 2019-12-04 14:55:26 · 138 阅读 · 0 评论 -
Java容器类源码学习-TreeMap(十)
官方介绍 一个基于红黑树的NavigableMap实现。Map根据其key的自然顺序进行排序,或者根据使用的构造函数由创建map时提供的比较器进行排序。 这个实现为containsKey、get、put和remove操作提供了保证的log(n)时间成本。算法是对Cormen, Leiserson和Rivest介绍的算法的改编。 ...原创 2019-11-28 14:59:27 · 102 阅读 · 0 评论 -
Java容器类源码学习-HashMap(九)
一、官方介绍 基于Hash table实现的Map接口。此实现提供所有可选的Map操作,并允许空值和空键。(HashMap类大致相当于Hashtable,只是它是不同步的,并且允许为空。)该类不保证Map的顺序;特别是,它不能保证顺序在一段时间内保持不变。 这个实现为基本操作(get和put)提供了稳定的时间性能,假设 hash函数将元素适当地分散到各个bucket中。集合视图的迭代需要与Has...原创 2019-11-13 14:56:16 · 182 阅读 · 0 评论 -
Java容器类源码学习-Map(八)
一、官方介绍 将键映射到值的对象。Map不能包含重复的键;每个键最多可以映射到一个值。 这个接口代替了Dictionary类,Dictionary类是一个完全抽象的类,而不是接口。 Map接口提供了三个集合视图,它们允许将映射的内容视为一组键、值的集合或一组键-值映射。映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些映射实现,比如TreeMap类,对它们的顺序做了特定的保证;而其他类...原创 2019-11-05 15:01:45 · 165 阅读 · 0 评论 -
Java容器类源码学习-TreeSet(七)
一、官方介绍 基于TreeMap的NavigableSet实现。元素使用它们的自然顺序排序,或者通过在设置创建时提供的比较器进行排序,这取决于使用的是哪个构造函数。 这个实现为基本操作(添加、删除和包含)提供了保证的log(n)时间开销。 ...原创 2019-11-04 16:06:49 · 158 阅读 · 0 评论 -
Java容器类源码学习-HashSet(六)
一、官方介绍 这个类实现Set接口,由一个 hash table (实际上是一个HashMap实例)支持。它不保证集合的迭代顺序;特别是,它不能保证顺序在一段时间内保持不变。该类允许空元素。 这个类为基本操作(添加、删除、包含和大小)提供了常数时间性能,假设hash函数正确地将元素分散到各个bucket中。遍历这个集合需要的时间与HashSet实例的大小(元素的数量)和支持HashMap实例的“...原创 2019-10-31 16:38:49 · 160 阅读 · 0 评论 -
Java容器类源码学习-Stack(五)
一、官方介绍 Stack类表示对象的后进先出(LIFO-In lastly,Out firstly)堆栈。它通过5个操作扩展了Vector类,这5个操作允许将一个Vector视为一个Stack。为基础的push和pop提供了操作,以及一个方法peek来获取Stack顶部,一个方法来测试是否栈是空的,和一个方法来判断某一项和stack的顶部距离。 第一次创建Stack时,它不包含任何项。 Dequ...原创 2019-10-31 15:53:34 · 207 阅读 · 0 评论 -
Java容器类源码学习-LinkedList(四)
一、官方介绍 双向链表实现了List和Deque接口。实现所有可选的List操作,并允许所有元素(包括null)。 所有操作的执行都符合双向链表的预期。索引到List中的操作将从头或尾遍历列表,以更接近指定索引的操作为准。 **注意,这个实现不是同步的。**如果多个线程同时访问一个链表,并且至少有一个线程从结构上修改了链表,那么它必须在外部同步。(结构修改是指增加或删除一个或多个元素的任何操作;...原创 2019-10-22 16:43:51 · 164 阅读 · 0 评论 -
Java容器类源码学习-Vector(三)
一、官方介绍 Vector类实现了一个可增长的对象数组。与数组一样,它包含可以使用整数索引访问的组件。但是,Vector的大小可以根据需要增长或收缩,以适应在创建向量之后添加和删除项。 每个Vector都试图通过维护容量和容量扩充来优化存储管理。容量总是至少与Vector大小相同;它通常更大,因为随着组件被添加到Vector中,向量的存储以块的形式增加,容量增量的大小。应用程序可以在插入大量组件...原创 2019-10-16 17:34:27 · 258 阅读 · 0 评论 -
Java容器类源码学习-ArrayList(二)
一、官方说明 List接口的可调整大小的数组实现。实现所有可选的 List操作,并允许所有元素,包括null。除了实现List接口之外,该类还提供了一些方法来操作内部用于存储List的数组的大小,(这个类大致相当于Vector,只是它是不同步的。) size、isEmpty、get、set、iterator和listIterator操作在常数时间内运行。添加操作在平摊常数时间内运行,也就是...原创 2019-10-14 14:06:26 · 156 阅读 · 0 评论 -
Java容器类
Java容器类 java容器类图 interface Iterable 官方介绍 实现这个接口允许对象成为“for-each循环”语句的目标 方法 iterator() 返回一个迭代器 forEach(Consumer<? super T> action) 默认的forEach方法 spliterator() interface Collection ex...原创 2019-10-12 11:22:14 · 188 阅读 · 0 评论 -
关于ThreadLocal的理解
ThreadLocal理解 1.什么是ThreadLocal 源码解释:线程局部变量 该类提供线程局部变量。这些变量不同于它们的正常对应关系是每个线程访问一个线程(通过its){@code get}或{@code set}方法)有自己的独立初始化变量的副本。{@code ThreadLocal}实例通常是私有的。 为什么要有这个 引用自神一样的博客关于ThreadLocal的解释 这个玩意有什么...原创 2019-03-25 10:57:45 · 151 阅读 · 0 评论