随笔分类 -  jdk源码分析

摘要:ThreadLocal类提供线程本地变量,为变量在每个线程创建一个副本,每个线程可以访问自己内部的副本变量。 比如,有这样一个需求,需要为每个线程创建一个独一无二的标识,这个标识在第一次调用ThreadId.get()的时候生成,在随后的调用中不会再改变。 类声明: 实例变量和相关的一个方法: 构造 阅读全文
posted @ 2016-09-28 15:05 没有梦想的小灰灰 阅读(374) 评论(0) 推荐(0)
摘要:TreeSet是基于TreeMap实现的,元素的顺序取决于元素自身的自然顺序或者在构造时提供的比较器。 对于add,remove,contains操作,保证log(n)的时间复杂度。 因为Set接口的定义根据equals方法,但是TreeSet接口约定元素的顺序基于compareTo或者compar 阅读全文
posted @ 2016-09-06 15:13 没有梦想的小灰灰 阅读(644) 评论(0) 推荐(0)
摘要:TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器。 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n)。 TreeMap的顺序与equals方法保持一致,这样才能遵守Map和SortMap的约定。 实 阅读全文
posted @ 2016-09-04 13:07 没有梦想的小灰灰 阅读(223) 评论(0) 推荐(0)
摘要:实例变量 4个构造器 扩容方法 设置容量 2个迭代器,一个从头迭代到尾,一个从尾迭代到头 Vector是线程安全的,它的方法使用synchronized修饰,如果不需要线程安全,推荐使用ArrayList代替。 阅读全文
posted @ 2016-09-01 00:24 没有梦想的小灰灰 阅读(325) 评论(0) 推荐(0)
摘要:LinkedList是一个双向链表的实现,允许所有的元素,包括null。 对于index操作,会从链头到链尾地搜索,即使它靠近一个特殊索引位置。 非线程安全的,在多线程环境下,需要外部同步或调用Collections.synchronizedList(new LinkedList(...));获得一 阅读全文
posted @ 2016-08-27 15:56 没有梦想的小灰灰 阅读(267) 评论(0) 推荐(0)
摘要:可变数组大小的List实现,允许所有的元素,包括null。(该类可粗略地看作是Vector,除了它不是同步化的) size、isEmpty、get、set、iterator和listIterator操作的运行时间是常量。add操作对于添加n个元素,需要O(n)的时间。其他的操作需要线性时间。 每个A 阅读全文
posted @ 2016-08-26 00:30 没有梦想的小灰灰 阅读(1361) 评论(1) 推荐(0)
摘要:TreeSet的实现基于TreeMap,元素的顺序取决于元素自然顺序或者在被创建出来时提供的比较器。 对于基本操作,add、remove、contains的时间复杂度为logn。 不是线程安全的,如果在多线程环境下,必须被同步化,可通过一个object作为锁来同步,或者使用Collections.s 阅读全文
posted @ 2016-08-22 23:59 没有梦想的小灰灰 阅读(225) 评论(0) 推荐(0)
摘要:HashSet实现Set接口,内部维护一个HashMap实例变量。不保证顺序,允许null元素。 对于基本的操作,如add,remove,contains,size,只需要常量的时间复杂度。 不是线程安全的,如果在多线程环境下,需要被同步化,如调用方法Collections.synchronized 阅读全文
posted @ 2016-08-21 22:34 没有梦想的小灰灰 阅读(368) 评论(0) 推荐(0)
摘要:Hashtable实现一个键值映射的表。任何非null的object可以用作key和value。 为了能存取对象,放在表里的对象必须实现hashCode和equals方法。 一个Hashtable有两个参数影响,initial capacity和load factor。 Hashtable是同步化的 阅读全文
posted @ 2016-08-06 17:56 没有梦想的小灰灰 阅读(180) 评论(0) 推荐(0)
摘要:StringBuffer是一个线程安全的可变序列的字符数组对象,它与StringBuilder一样,继承父类AbstractStringBuilder。在多线程环境中,当方法操作是必须被同步,StringBuffer内的方法被同步化时,以实现跟在单线程中操作一样的一致性。 从上面源码可知,Strin 阅读全文
posted @ 2016-06-28 18:25 没有梦想的小灰灰 阅读(546) 评论(0) 推荐(0)
摘要:StringBuilder是一个可变序列的字符数组对象,它继承自AbstractStringBuilder抽象类。它不保证同步,设计出来的目的是当这个字符串缓存只有单线程使用的时候,取代StringBuffer的。建议使用它而不是StringBuffer,因为它的速度更快。 StringBuilde 阅读全文
posted @ 2016-06-26 20:23 没有梦想的小灰灰 阅读(296) 评论(0) 推荐(0)
摘要:AbstractStringBuilder是一个抽象类,是StringBuilder和StringBuffer的父类,分析它的源码对StringBuilder和StringBuffer代码的理解有很大的帮助。 先来看看该类的声明: 该类实现Appendable和CharSequence接口。 成员变 阅读全文
posted @ 2016-06-10 21:59 没有梦想的小灰灰 阅读(347) 评论(0) 推荐(0)
摘要:Map是一个接口,一个map不能包含重复的key,每个key只能映射唯一一个value。 Map接口是用来取代Dictionary抽象类的。 Map接口提供三个集合视图,1.key的集合 2.value的集合 3.key-value的集合。map内元素的顺序取决于Iterator的具体实现,获取集合 阅读全文
posted @ 2016-06-05 23:36 没有梦想的小灰灰 阅读(4049) 评论(0) 推荐(0)
摘要:Dictionary是一个抽象类,Hashtable是它的一个子类。 The <code>Dictionary</code> class is the abstract parent of any * class, such as <code>Hashtable</code>, which maps 阅读全文
posted @ 2016-06-04 21:43 没有梦想的小灰灰 阅读(1331) 评论(0) 推荐(0)
摘要:在java jdk8中对HashMap的源码进行了优化,在jdk7中,HashMap处理“碰撞”的时候,都是采用链表来存储,当碰撞的结点很多时,查询时间是O(n)。 在jdk8中,HashMap处理“碰撞”增加了红黑树这种数据结构,当碰撞结点较少时,采用链表存储,当较大时,采用红黑树(特点是查询时间 阅读全文
posted @ 2016-06-04 14:08 没有梦想的小灰灰 阅读(599) 评论(0) 推荐(1)