本篇开始列举Java常见的集合面试题。
Java集合:按照官方的定义是,Java集合是一种用于存储和管理一组对象的类或接口的集合。它提供了一种更高级别的抽象,允许用户方便地进行添加、删除、查找和遍历操作。
1、简述Java常见的集合
Java集合两个最顶层的类:Collection和Map。
一、Collection的子类包括List和Set:
1)List主要实现类:ArrayList、LinkedList、Stack、Vector ...
2)Set主要实现类:Hashset、TreeSet、LinkedHashSet ...
二、Map主要实现类:HashMap、TreelMap.、Hashtable、ConcurrentHashMap...
2、简述Java常见的并发集合
并发集合在JDK 1.5之后才有,位于java.util.concurrent 包下,常见的有:
1)ConcurrentHashMap
2)ConcurrentLinkedQueue
3)ConcurrentLinkedDeque
4)CopyOnWriteArrayList
5)CopyOnWriteArrayset
3、List、Set、Map的区别
List、Set、Map的区别主要体现在数据结构、是否有序、是否可重复、键值是否为null等,如下图
4、Collection和Collections的区别
Collection是集合接口,它是List和Set集合的一个顶层接口。
Collections是集合类的一个工具类,提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
5、集合使用泛型的优点
1)强制集合只能容纳指定类型的元素,避免在运行时出现ClassCastException类转换异常,如果添加了不是指定类型的元素,编译期间会报错。
2)代码更整洁,使用时不需要显式转换和使用instanceOf,取出来就是指定类型的元素。
3)优化了JVM运行时环境,因为它不会产生类型检查的字节码指令。
6、为什么Map不继承Collection
因为Collection集合定义的是一组对象,而Map是包含key-value键值对形式的集合,因此继承没有意义。
7、哪些常见的Map是线程安全
1)ConcurrentHashMap
Map<String, String> map = new ConcurrentHashMap<>();
ConcurrentHashMap是JDK1.5之后推出,主要解决并发问题,具体会在后面的并发面试题详述。
2)Hashtable
Map<String, String> map = new Hashtable<>();
Hashtable中所有关键方法都由synchronized修饰,说明是方法级别的阻塞,它们占用共享资源锁,导致同一时刻只能一个线程操作,不能同时执行,所以Hashtable集合效率较低,一般不建议使用,如下为部分源码:
3)SynchronizedMap
Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());
SynchronizedMap的实现方式是加了对象锁,即每次对HashMap的操作都要先获取mutex的对象锁才能进入,在效率上跟Hashtable差不多,一般不建议使用。
8、HashMap和Hashtable的区别
1)线程安全
HashMap是线程不安全,Hashtable是线程安全,因为Hashtable的关键方法都由synchronized修饰。
2)性能对比
HashMap性能较好,使用更广,而Hashtable由于是线程安全,所以性能较低。
3)null问题
HashMap允许键值都为null,Hashtable不允许键值为null。
4)实现方式
两者继承的类不一致,HashMap继承AbstractMap,Hashtable继承Dictionary。
5)容量扩容
HashMap的初始容量为16,Hashtable初始容量为11,两者的负载因子默认都是0.75。
当现有容量大于总容量*负载因子,HashMap扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍+1。
6)迭代器
HashMap的Iterator迭代器是fail-fast的,Hashtable的Enumerator迭代器不是fail-fast。
9、HashMap和TreeMap在实际中如何选择
1)对于一般的key-value键值对存储和操作,HashMap是最优的选择。
2)如果需要对Map的key-value进行排序,TreeMap是最优的选择,因为HashMap不支持排序。
10、Collection和Map的结构图
1)Collection
2)Map
本篇面试题到此结束。