Java集合面试题(一)

本篇开始列举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

本篇面试题到此结束。

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值