Java集合面试题及答案(6-10)

6、如何防止Java集合的并发修改问题?
答:可以使用线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等;或者使用同步代码块或同步方法对集合进行加锁。

7、HashSet和TreeSet有什么区别?
答:HashSet和TreeSet都是Set接口的实现类,但是它们的底层实现不同。HashSet是基于哈希表实现的,不保证元素的顺序,但是插入、删除和查找操作的效率比较高;TreeSet是基于红黑树实现的,可以对元素进行自然排序或者指定排序规则进行排序,但是插入、删除和查找操作的效率比较低。

8、HashMap和Hashtable有什么区别?
答:HashMap和Hashtable都是Map接口的实现类,但是它们的底层实现不同。HashMap是非线程安全的,不保证元素的顺序,允许null键和null值,效率较高;Hashtable是线程安全的,不保证元素的顺序,不允许null键和null值,效率较低。

9、如何遍历Java集合?
答:可以使用迭代器Iterator进行遍历,也可以使用增强型for循环,还可以使用Stream API的forEach()方法遍历。

10、如何遍历Map中的元素?
答:可以通过Map的keySet()方法返回键的集合,然后遍历键的集合,获取对应的值;也可以通过Map的entrySet()方法返回键值对的集合,然后遍历键值对的集合,获取键和值。例如:

Map<String, String> map = new HashMap<>();
map.put("A", "apple");
map.put("B", "banana");

// 遍历键的集合
for (String key : map.keySet()) {
    String value = map.get(key);
    System.out.println(key + " = " + value);
}

// 遍历键值对的集合
for (Map.Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " = " + value);
}