原文:https://dzone.com/articles/top-java-collection-interview-questions-for-2021
作者: Sonia Mathias
翻译: 祝坤荣
对有教训开发者的常见问题
问题 1:什么是 CopyOnWriteArrayList?
答:这个类在 java.util.concurrent 包中且实现了 list 接口。它内建了一个外部 ArrayList 的克隆副原本实现所有的操作和批改。它很平安并且在迭代中永远不会抛出 ConcurrentModificationException。
问题 2:ConcurrentModificationException 什么时候会产生?
答:当数据集在应用时尝试做出批改会抛出 java.util.ConcurrentModificationException,也就是当咱们在进行数据集的迭代时进行批改。
问题 3:为什么 ConcurrentHashmap 比 Hash table 或 Synchronized maps 更好?
答:ConcurrentHashMap 能够被平安的应用在多线程环境中。它的性能比问题中提到的两个更好,因为 ConcurrentHashMap 中只有一小部分会被锁,而 Hashtable 和 SynchronizedMap 则整个都会被锁。
问题 4:解释一下 diamond 操作符(也就是 <>)。
答:diamond 操作符帮编译器收集泛化类的参数类型。在 Java SE 中,开发者能够用一个空的参数集(<>)来代替参数化的构造函数,这就是 diamond 操作符。
问题 5: 当要在汇合类中应用一个自定义的对象来当主键时须要做什么?
答:如果在 Map 中应用了自定义的对象作为主键,你须要覆写 equals()和 hashCode()办法。从另一方面,如果你在一个排过序的汇合中应用自定义对象,你还要保障你的 equals()办法与 compareTo()办法是统一的。
问题 6:解释一下 iterator 与 collection 汇合。
答:Iterator 只能通过 next()办法来挪动和读取下一个元素,remove()也是一样。Collection,能够通过 add(),iterator(),remove()和 clear()来增加,iterate,删除和分明整个数据结构。同时其也有一些 boolean 办法。因为 Iterator 绝对于 collection 有更少的操作所以它更快。
问题 7:列出一些 HashSet 的个性。
答:HashSet 实现了 Set 接口。底层的数据结构是 Hashtable。容许 Null 元素,反复的元素是不容许的。对象是基于它们的 hashcode 被插入的。
问题 8:解释下 fail-fast 与 fail-safe 的不同
答:
Fail-fast
- 应用了原生 collection 来遍历
- 当迭代进行时不能批改汇合
- 会抛出 ConcurrentModicationException 异样
Fail-safe
- 应用了原生汇合的复制版进行遍历
- 在迭代进行中能够批改汇合
- 不会抛出任何异样
问题 9:ArrayBlockingQueue 与 LinkedBlockingQueue 的不同
答:
ArrayBlockingQueue
- 有界阻塞队列将元素存储在数组中
- 更高的吞吐
- 应用 single-lock double 算法
LinkedBlockingQueue
- 基于 linked 节点实现的可选的有界阻塞队列
- 比拟低的吞吐
- 应用 two-lock queue 算法
问题 10:Java 的 TreeMap 怎么样?你更喜爱应用哪种数据结构:HashMap 还是 TreeMap?
答:TreeMap 是基于红黑树实现的科导航 Map。它应用红黑树算法来排序 TreeMap 的对象键。咱们依据咱们的需要来抉择。TreeMap 是排序过的而 HashMap 更快。因而,如果咱们的元素是有序的,咱们用 TreeMap,否则就应用 HashMap。
本文来自祝坤荣 (时序) 的微信公众号「麦芽面包」,公众号 id「darkjune_think」
开发者 / 科幻爱好者 / 硬核主机玩家 / 业余翻译
转载请注明。
微博: 祝坤荣
B 站: https://space.bilibili.com/23185593/
交换 Email: zhukunrong@yeah.net