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集合面试知识点的主要内容,如果未能解决你的问题,请参考以下文章
Java集合中常见的面试题 (收藏+保存+offer拿到手软)