摘要: 1. 数据结构都是数组+拉链实现的哈希表,但是具体实现上差别大了2. 并发Hashtable全表锁HashMap多线程不安全,需要自己封装ConcurrentHashMap加细粒度锁,读不加锁,如果读到空值再加锁。注意这三个关键字final,transient,volatile3. nullHash... 阅读全文
posted @ 2015-08-17 23:28 山野豪杰 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bu... 阅读全文
posted @ 2015-08-17 23:27 山野豪杰 阅读(5198) 评论(0) 推荐(1) 编辑
摘要: ConcurrentHashMap使用了锁分离技术, 使用了多个锁来控制对hash表的不同部分进行的修改。使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。 有些方法需要跨段,比如size... 阅读全文
posted @ 2015-08-17 23:19 山野豪杰 阅读(515) 评论(0) 推荐(0) 编辑
摘要: JDK1.7 java.uti.Arrays开始使用DualPivotQuicksort作为默认排序方法详细讲解链接:http://www.tuicool.com/articles/BfY7Nz算法思想:选出两个枢轴P1和P2,需要3个指针L,K,G。3个指针的作用如下图:算法为以下的步骤:(数组大... 阅读全文
posted @ 2015-08-17 23:08 山野豪杰 阅读(1084) 评论(0) 推荐(0) 编辑
摘要: HashMap使用哈希表来存储数据,并用拉链法来处理冲突。LinkedHashMap继承自HashMap,同时自身有一个链表,使用链表存储数据,不存在冲突。LinkedList和LinkedHashMap一样使用一个双向循环链表,但LinkedList存储的是简单的数据,并不是“键值对”。Linke... 阅读全文
posted @ 2015-08-17 23:02 山野豪杰 阅读(164) 评论(0) 推荐(0) 编辑
摘要: TreeSet 底层实际使用的存储容器就是 TreeMap,他们的关系就像HashMap和HashSet的关系。TreeSet采用了TreeMap作为其Map保存“键-值”对,所以TreeSet判断元素重复是依靠Comparable接口或Comparator接口实现的。 阅读全文
posted @ 2015-08-17 22:55 山野豪杰 阅读(133) 评论(0) 推荐(0) 编辑
摘要: TreeMap继承关系,和HashMap同继承于AbstractMap,属于兄弟关系。public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, java.io.Serializable-1. ... 阅读全文
posted @ 2015-08-17 22:54 山野豪杰 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 由哈希表实现,实际底层为HashMap。public HashSet(Collection c) { map = new HashMap(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); }public HashSet... 阅读全文
posted @ 2015-08-17 22:46 山野豪杰 阅读(164) 评论(0) 推荐(0) 编辑
摘要: Collection 是集合类的上级接口,继承于他的接口主要有 Set和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。 对象要保存... 阅读全文
posted @ 2015-08-17 22:42 山野豪杰 阅读(187) 评论(0) 推荐(0) 编辑
摘要: /** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 16; /** * The maximum ca... 阅读全文
posted @ 2015-08-17 22:40 山野豪杰 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 1)都实现了 Map 接口,HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。2)HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsValue 和containsKey。3)Hashta... 阅读全文
posted @ 2015-08-17 22:29 山野豪杰 阅读(131) 评论(0) 推荐(0) 编辑
摘要: ArrayList和Vector都实现了RandomAccess接口,而LinkedList没有,RandomAccess接口是一个空接口,所以它没有实际意义,就是一个标记,标记这个类支持快速随机访问,所以,arrayList和vector是支持随机访问的,但是LinkedList不支持。Array... 阅读全文
posted @ 2015-08-17 22:28 山野豪杰 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 方法和ArrayList中基本上都是相同的,只是加了synchronized关键字,而调用subList时使用了Collections.synchronizedList。具体的以后有时间再分析。 阅读全文
posted @ 2015-08-17 22:21 山野豪杰 阅读(120) 评论(0) 推荐(0) 编辑
摘要: public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。public st... 阅读全文
posted @ 2015-08-17 22:20 山野豪杰 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 默认初始容量为10,底层用的是对象数组实现的。public void ensureCapacity(int minCapacity)。确保数组最小容量,用于添加元素的时候。它的父类AbstractList只有一个抽象方法abstract public E get(int index);modCoun... 阅读全文
posted @ 2015-08-17 22:15 山野豪杰 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 相同点:这两个类都实现了 List 接口( List 接口继承了 Collection 接口),他们都是有序集合(是指能够保持加入时的顺序),元素允许重复。不同点:(1) Vector 是线程安全,ArrayList 是线程序不安全,只有一个线程会访问到集合,那最好是使用ArrayList因为它不考... 阅读全文
posted @ 2015-08-17 22:00 山野豪杰 阅读(141) 评论(0) 推荐(0) 编辑
摘要: java,集合,comparable,comparator 阅读全文
posted @ 2015-08-17 21:56 山野豪杰 阅读(575) 评论(0) 推荐(0) 编辑