ArrayList和LinkedList的区别

List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表。ArrayList底层采用数组来保存每个集合元素,LinkedList则是一种链式存储的线性表。其本质上就是一个双向链表,但它不仅实现了List接口,还实现了Deque接口。也就是说LinkedList既可以当成双向链表使用,也可以当成队列使用,还可以当成栈来使用(Deque代表双端队列,即具有队列的特征,也具有栈的特征 …… 阅读全文

HashSet实现原理及源码分析

HashSet简介HashSet是Set接口实现,它按照Hash算法来存储集合中的元素不保证元素顺序HashSet是非同步的,如果多个线程同时访问一个HashSet,要通过代码来保证其同步集合元素可以是null对于HashSet而言,它是基于HashMap实现的。HashSet底层采用HashMap来保存所有元素,查看HashSet源代码,可以看到如下提示。public c …… 阅读全文

TreeMap实现原理及源码分析

TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建时提供的Comparator进行排序、对于TreeMap而言,每个Entry都被当成“红黑树”的一个节点对待,示例如下:public class TreeMapTest { public static void main(String[ …… 阅读全文

TreeSet实现原理及源码分析

类似于HashMap和HashSet之间的关系,HashSet底层依赖于HashMap实现,TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。但实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来包含Set集合中的所有元素。下面是TreeSet类的部分源代码public class TreeSetE> extends A …… 阅读全文

Hashtable实现原理及源码分析

Hashtable简介和HashMap一样,Hashtable也是一个散列表,存储的内容是键值对(key-value)映射。 Hashtable在Java中的定义为:public class HashtableK,V> extends DictionaryK,V> implements MapK,V>, Cloneable, java.io.Serializable从 …… 阅读全文

HashMap和Hashtable的区别

相同点HashMap和Hashtable都是存储“键值对(key-value)”的散列表。存储的思想都是:通过table数组存储,数组的每一个元素都是一个Entry;而一个Entry就是一个单向链表,Entry链表中的每一个节点保存了key-value键值对数据。添加key-value键值对:首先,根据key值计算出哈希值,再计算出数组索引。然后,根据数组索引找到Entry(单向链表),再 …… 阅读全文