集合

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 查询效率更高;

 

posted @ 2021-02-27 23:54  歪歪头  阅读(43)  评论(0)    收藏  举报