集合
Map、Collection(无序不支持索引)、Set、List(有序)。Map和Collection是所有集合的父接口。
Set接口的实现类有HashSet、TreeSet、LinkedHashSet。
List的接口实现有ArrayList、LinkedList、Vector和Stack。
Map的接口实现有HashMap、HashTable、TreeMap和ConcurrentHashMap。
HashMap和HashTable有什么区别?
HashMap和HashTable它们都实现了Map的接口,HashMap继承AbstractMap类。Hashtable继承于Dictionary抽象类。
HashMap底层是数组、链表和红黑树。线程不安全,不同步。允许key和value都为null。
HashTable底层是数组和链表,线程安全,同步。不允许key和value都为空值。
HashMap和HashTable都是用元素来决定其元素的存储,所以他们都有如下属性:容量(capacity)、初始化容量(initial capacity)、尺寸(size)、
负载因子(load factor)。还有一个“负载极限” 默认0.75,自动扩容(rehashing)。
常见集合底层:
HashSet底层是HashMap、TreeSet底层是TreeMap(红黑树)、LinkedHashSet底层是HashMap和一个双向链表。
ArrayList底层是数组、 LinkedList底层是双向链表、 Vector底层是数组、 Stack底层是维护一个数组。
HashMap底层是红黑树、 HashTable底层是哈希表、 TreeMap底层是红黑树、 ConcurrentHashMap底层是数组、链表和红黑树。
ConcurrentHashMap结合了HashMap和HashTable的优势,线程安全又高效。ConcurrentHashMap采用了锁分段技术,把数据分段存储,每一段配一把锁。
ConcurrentHashMap实现原理:jdk1.7 数组(Segment) + 数组(HashEntry) + 链表(HashEntry节点)、jdk1.8 Node数组+链表 / 红黑树。
ArrayList 和 Vector 的区别:
Vector 是线程安全的,ArrayList 是线程不安全的。
Vector在数据满时增长为原来的两倍,而 ArrayList在数据量达到容量的一半时,增长为原容量的1.5倍。
ArrayList和LinkedList的区别:
LinkedList基于链表的数据结构;ArrayList基于动态数组的数据结构
LinkedList 在插入和删除数据时效率更高,ArrayList 查询效率更高;

浙公网安备 33010602011771号