java集合面试问题(二)
34. 什么是IdentityHashMap?
回答: IdentityHashMap是java.util包中提供的一个实现Map接口的类,它使用引用的身份(内存地址)而不是equals方法来判断键的相等性。这意味着只有当两个键的引用是同一个对象时,它们才被认为是相等的。
这在某些情况下很有用,例如需要精确地根据对象的身份进行键值存储。
代码示例:
IdentityHashMap<String, Integer> identityMap = new IdentityHashMap<>();
String key1 = new String("key");
String key2 = new String("key");
identityMap.put(key1, 1);
// key2不等于key1,所以不会被视为相等的键
identityMap.get(key2); // 输出null
35. 什么是Collections类的checkedXXX方法?
回答: java.util.Collections类提供了一系列用于创建类型安全(typed-safe)的集合的方法,它们称为checkedXXX方法。这些方法可以帮助你确保向集合中添加的元素类型是
正确的,从而在运行时避免类型转换错误。
代码示例:
List<String> stringList = new ArrayList<>();
List checkedList = Collections.checkedList(stringList, String.class);
// 现在只能添加String类型的元素到checkedList
36. 什么是CopyOnWriteArrayList和CopyOnWriteArraySet?
回答: CopyOnWriteArrayList和CopyOnWriteArraySet都是并发集合,属于java.util.concurrent包。它们通过使用一种特殊的写时复制(Copy-On-Write)策略来实现高并发的读操作。
- CopyOnWriteArrayList: 是线程安全的List实现,适用于读多写少的场景。在修改操作(添加、删除元素)时,它会复制一份原始数组,并进行修改,从而保证读取操作的线程安全性。
- CopyOnWriteArraySet: 是线程安全的Set实现,它基于CopyOnWriteArrayList实现,拥有类似的特性。
这些集合对于读多写少的情况提供了一种高效的解决方案。
代码示例:
CopyOnWriteArrayList<String> copyOnWriteList = new CopyOnWriteArrayList<>();
CopyOnWriteArraySet<Integer> copyOnWriteSet = new CopyOnWriteArraySet<>();
// 在多线程环境中使用copyOnWriteList和copyOnWriteSet