第54章测试:Java Map接口

测试你对HashMap、LinkedHashMap和TreeMap的掌握程度

1
关于HashMap的特性,以下哪个说法是正确的?
A. HashMap保证元素的插入顺序
B. HashMap不允许null键和null值
C. HashMap基于哈希表实现,查找时间复杂度为O(1)
D. HashMap是线程安全的

解析

HashMap基于哈希表实现,在理想情况下插入和查找的时间复杂度都是O(1)。HashMap不保证元素顺序,允许null键和null值,且不是线程安全的。

2
以下代码的输出结果是什么?
Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("a", 3); System.out.println(map.size() + ", " + map.get("a"));
A. 3, 1
B. 2, 3
C. 3, 3
D. 2, 1

解析

HashMap中键是唯一的,当使用相同的键"a"再次put时,会覆盖原来的值。所以最终map中有2个键值对:("a", 3)和("b", 2),map.get("a")返回3。

3
LinkedHashMap与HashMap的主要区别是什么?
A. LinkedHashMap性能更好
B. LinkedHashMap保持插入顺序或访问顺序
C. LinkedHashMap不允许null值
D. LinkedHashMap是线程安全的

解析

LinkedHashMap继承自HashMap,主要区别是它维护了一个双向链表来保持元素的插入顺序或访问顺序。这使得遍历LinkedHashMap时能够按照可预测的顺序进行。

4
如何创建一个按访问顺序排列的LinkedHashMap?
A. new LinkedHashMap<>()
B. new LinkedHashMap<>(16, 0.75f, true)
C. new LinkedHashMap<>(true)
D. new LinkedHashMap<>(16, true)

解析

LinkedHashMap的构造函数LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)中,第三个参数accessOrder为true时表示按访问顺序排列,为false时按插入顺序排列。

5
TreeMap的排序是基于什么实现的?
A. 哈希表
B. 红黑树
C. 链表
D. 数组

解析

TreeMap基于红黑树(Red-Black Tree)实现,这是一种自平衡的二叉搜索树。红黑树保证了插入、删除和查找操作的时间复杂度都是O(log n),同时维护元素的有序性。

6
以下哪个Map实现不允许null键?
A. HashMap
B. LinkedHashMap
C. TreeMap
D. 以上都不允许

解析

TreeMap不允许null键,因为它需要对键进行比较来维护排序。如果键为null,比较操作会抛出NullPointerException。但TreeMap允许null值。HashMap和LinkedHashMap都允许null键和null值。

7
以下代码会输出什么?
TreeMap<Integer, String> map = new TreeMap<>(); map.put(3, "three"); map.put(1, "one"); map.put(2, "two"); for (Integer key : map.keySet()) { System.out.print(key + " "); }
A. 3 1 2
B. 1 2 3
C. 顺序不确定
D. 2 1 3

解析

TreeMap会自动按照键的自然顺序进行排序。对于Integer类型,自然顺序就是数值大小顺序,所以输出是1 2 3。

8
Map接口的哪个方法可以获取所有的键值对?
A. keySet()
B. values()
C. entrySet()
D. getAll()

解析

entrySet()方法返回Map中所有键值对的Set视图,每个元素都是Map.Entry类型。keySet()返回所有键的Set,values()返回所有值的Collection,getAll()不是Map接口的方法。

9
在性能方面,以下哪个说法是正确的?
A. TreeMap的查找性能最好
B. HashMap的查找性能最好
C. LinkedHashMap的查找性能最好
D. 三者性能相同

解析

HashMap的查找性能最好,平均时间复杂度为O(1)。LinkedHashMap由于需要维护链表,性能略低于HashMap但仍是O(1)。TreeMap基于红黑树,查找时间复杂度为O(log n)。

10
以下哪种场景最适合使用TreeMap?
A. 需要最快的查找速度
B. 需要保持插入顺序
C. 需要有序的键值对和范围查询
D. 需要线程安全

解析

TreeMap最适合需要有序键值对和范围查询的场景。它提供了firstKey()、lastKey()、subMap()等导航方法,可以进行范围查询。如果只需要快速查找,HashMap更合适;如果需要保持插入顺序,LinkedHashMap更合适。