JAVA集合面试知识点

Posted lisin-lee-cooper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA集合面试知识点相关的知识,希望对你有一定的参考价值。

线程安全: Vector、HashTable

线程不安全:HashMap、TreeMap、HashSet、ArrayList、LinkedList

2、 Arraylist与 LinkedList 异同
Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表数据结构;
ArrayList 查询 O(1),插入 O(n);LinkedList 查询 O(n),插入 O(1);
ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间

3、 HashMap 和 Hashtable 的区别:
相同点: 都是实现了Map接口(hashTable还实现了Dictionary 抽象类)。
不同点:
同步性:Hashtable 的方法是 Synchronize 的,线程安全;而 HashMap 是线程不安全的,不是同步的。所以只有一个线程的时候使用hashMap效率要高。
值:HashMap对象的key、value值均可为null。HahTable对象的key、value值均不可为null。
容量:HashMap的初始容量为16,扩容时是当前容量翻倍 即:capacity * 2,Hashtable初始容量为11,扩容时是容量翻倍+1 即:capacity * 2+1,两者的填充因子默认都是0.75。

4、Set和List的区别
Set 接口实例存储的是无序的,不重复的数据。
List 接口实例存储的是有序的,可以重复的元素。都可以存储null值,
Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。

5、ConcurrentHashMap分段锁
jdk1.7中:ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。Segment 是一种可重入锁 ReentrantLock,在 ConcurrentHashMap 里扮演锁的角色,HashEntry 则用于存储键值对数据。

Segment数组的意义就是将一个大的table分割成多个小的table来进行加锁,也就是上面的提到的锁分离技术,而每一个Segment元素存储的是HashEntry数组+链表,这个和HashMap的数据存储结构一样。

1.8 中:放弃了Segment,直接用 Node数组+链表+红黑树 的数据结构来实现,并发控制使用Synchronized + CAS来操作,整个看起来就像是优化过且线程安全的HashMap。

以上是关于JAVA集合面试知识点的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#JAVA三年经验面试题

Java集合中常见的面试题 (收藏+保存+offer拿到手软)

Java集合中常见的面试题 (收藏+保存+offer拿到手软)

Java集合(总结,面试使用)

Java基础04_集合框架

面试知识点二:Java集合