摘要:
1. 数据结构都是数组+拉链实现的哈希表,但是具体实现上差别大了2. 并发Hashtable全表锁HashMap多线程不安全,需要自己封装ConcurrentHashMap加细粒度锁,读不加锁,如果读到空值再加锁。注意这三个关键字final,transient,volatile3. nullHash... 阅读全文
摘要:
迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bu... 阅读全文
摘要:
ConcurrentHashMap使用了锁分离技术, 使用了多个锁来控制对hash表的不同部分进行的修改。使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。 有些方法需要跨段,比如size... 阅读全文
摘要:
JDK1.7 java.uti.Arrays开始使用DualPivotQuicksort作为默认排序方法详细讲解链接:http://www.tuicool.com/articles/BfY7Nz算法思想:选出两个枢轴P1和P2,需要3个指针L,K,G。3个指针的作用如下图:算法为以下的步骤:(数组大... 阅读全文
摘要:
HashMap使用哈希表来存储数据,并用拉链法来处理冲突。LinkedHashMap继承自HashMap,同时自身有一个链表,使用链表存储数据,不存在冲突。LinkedList和LinkedHashMap一样使用一个双向循环链表,但LinkedList存储的是简单的数据,并不是“键值对”。Linke... 阅读全文
摘要:
TreeSet 底层实际使用的存储容器就是 TreeMap,他们的关系就像HashMap和HashSet的关系。TreeSet采用了TreeMap作为其Map保存“键-值”对,所以TreeSet判断元素重复是依靠Comparable接口或Comparator接口实现的。 阅读全文
摘要:
TreeMap继承关系,和HashMap同继承于AbstractMap,属于兄弟关系。public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, java.io.Serializable-1. ... 阅读全文
摘要:
由哈希表实现,实际底层为HashMap。public HashSet(Collection c) { map = new HashMap(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); }public HashSet... 阅读全文
摘要:
Collection 是集合类的上级接口,继承于他的接口主要有 Set和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。 对象要保存... 阅读全文
摘要:
/** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 16; /** * The maximum ca... 阅读全文