1. 如何判断两个 Set 是否相等?
判断两个Set是否相等:比较它们的元素是否完全相同,即每个Set包含的元素相同且数量一致(Set本身不允许重复元素,因此无需考虑重复问题)。
直接使用Set的equals方法即可实现,例如set1.equals(set2)。
2. 如何将 List 转 Set?
List list = Arrays.asList("a", "b", "c");
Set set = new HashSet<>(list);
3. HashMap 中的 get() 方法时间复杂度是多少?
平均情况
时间复杂度是 O(1)。
因为 HashMap 会根据 key.hashCode() 计算哈希值,定位到某个桶(bucket),然后在该桶里查找对应的键值对。若哈希分布均匀,桶里元素少,查找速度接近常数时间。
最坏情况
时间复杂度是 O(n)。
当大量键发生哈希冲突(比如全部落到同一个桶),桶里的数据会退化为链表或红黑树:
链表结构:遍历链表查找,最坏情况 O(n)。
红黑树结构 (JDK 1.8 以后优化):当链表长度超过 8,HashMap 会把链表转换为红黑树,查找复杂度降低为 O(log n)。
4. 如何将 Map 转 List?
将 Map 的键转换为 List:`List keyList = new ArrayList<>(map.keySet());`
将 Map 的值转换为 List:`List valueList = new ArrayList<>(map.values());`
将 Map 的键值对转换为 List:`List> entryList = new ArrayList<>(map.entrySet());`
5. 如何判断两个 List 是否相等?
判断两个List是否相等:首先检查两个List的引用是否相同,若相同则直接返回true。若不同,则比较两个List的大小(元素数量),若大小不同则返回false。若大小相同,则逐个比较对应位置的元素是否相等(使用元素的equals方法),所有元素均相等则返回true,否则返回false。
6. Set 和 List 在查找元素时性能区别?
Set 查找元素的时间复杂度为 O(1),性能极高。List 查找元素的时间复杂度为 O(n),性能随数据量增大而线性下降。Set 的查找性能远优于 List。
7. TreeMap 中 key 必须实现 Comparable 吗?
TreeMap 的 key 必须实现 Comparable 接口,或者在构造 TreeMap 时提供自定义的 Comparator。否则在添加未实现 Comparable 且未提供 Comparator 的 key 时会抛出 ClassCastException。
8. 如何遍历 Map?有哪些方式?
1. 使用 forEach 方法:map.forEach((value, key) => { /* 操作 */ });
2. 使用 for...of 循环和 entries() 方法:for (let [key, value] of map.entries()) { /* 操作 */ };
3. 使用 for...of 循环和 keys() 方法:for (let key of map.keys()) { let value = map.get(key); /* 操作 */ };
4. 使用 for...of 循环和 values() 方法:for (let value of map.values()) { /* 操作 */ };
5. 使用迭代器和 next() 方法:let iterator = map.entries(); let result = iterator.next(); while (!result.done) { let [key, value] = result.value; /* 操作 */ result = iterator.next(); }
9. LinkedHashMap 的 accessOrder 是什么?
LinkedHashMap的accessOrder是一个布尔类型的构造参数,用于控制LinkedHashMap的迭代顺序。当accessOrder设置为false时(默认值),迭代顺序基于元素的插入顺序。当accessOrder设置为true时,迭代顺序将基于元素的访问顺序,即最近访问的元素(包括get和put操作)会被移动到链表尾部,这使得LinkedHashMap可以实现LRU(最近最少使用)缓存机制。
10. HashMap 扩容为什么是 2 的幂次方?
HashMap 扩容为2的幂次方是为了通过位运算 (hash & (length-1)) 替代取模运算 hash % length,提升计算效率。length为2的幂时,length-1的二进制全为1,使得哈希分布更均匀,减少哈希碰撞。
购买: 1元
遗忘算法加持,高效记忆