面试题答案
一键面试LinkedHashSet维护插入顺序的原理
LinkedHashSet 继承自 HashSet 并且实现了 Set 接口,它在 HashSet 的基础上增加了维护插入顺序的功能。其原理主要依赖于两个关键部分:
- 哈希表:LinkedHashSet 内部使用了一个哈希表(实际上是一个 HashMap)来存储元素,这样可以保证元素的唯一性,因为 HashMap 的键是唯一的。
- 双向链表:LinkedHashSet 还维护了一个双向链表,这个链表用于记录元素插入的顺序。每次向 LinkedHashSet 中添加新元素时,不仅会将元素放入哈希表,还会将其添加到双向链表的尾部。当遍历 LinkedHashSet 时,会按照双向链表的顺序依次访问元素,从而实现按照插入顺序输出。
代码示例
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
// 创建一个LinkedHashSet
Set<Integer> linkedHashSet = new LinkedHashSet<>();
// 添加元素
linkedHashSet.add(3);
linkedHashSet.add(1);
linkedHashSet.add(4);
linkedHashSet.add(1); // 尝试添加重复元素
// 输出LinkedHashSet中的元素,将按照插入顺序输出
for (Integer num : linkedHashSet) {
System.out.println(num);
}
}
}
在上述代码中,创建了一个 LinkedHashSet
并向其中添加了一些整数元素,包括一个重复元素。最后通过增强型 for
循环遍历 LinkedHashSet
,输出的元素顺序将与插入顺序一致。重复元素 1
只会被添加一次,因为 LinkedHashSet
保证元素的唯一性。