考虑以下 SSCCE:
public static void main(String[] args) {
LinkedHashSet<String> set1 = new LinkedHashSet<>();
set1.add("Bob");
set1.add("Tom");
set1.add("Sam");
LinkedHashSet<String> set2 = new LinkedHashSet<>();
set2.add("Sam");
set2.add("Bob");
set2.add("Tom");
System.out.println(set1);
System.out.println(set2);
System.out.println(set1.equals(set2));
}
这打印:
[Bob, Tom, Sam]
[Sam, Bob, Tom]
true
但如果你改变LinkedHashSet
to LinkedList
:
public static void main(String[] args) {
LinkedList<String> set1 = new LinkedList<>();
set1.add("Bob");
set1.add("Tom");
set1.add("Sam");
LinkedList<String> set2 = new LinkedList<>();
set2.add("Sam");
set2.add("Bob");
set2.add("Tom");
System.out.println(set1);
System.out.println(set2);
System.out.println(set1.equals(set2));
}
它产生:
[Bob, Tom, Sam]
[Sam, Bob, Tom]
false
我的问题是澄清之一。有人可以帮助理解这一点吗?为什么会有一个LinkedHashSet
被认为是相等的,而相同的LinkedList
不会?我假设的定义是List
and Set
发挥作用,但我不确定。
基本上,我是说如果你考虑Set
是一样的,你不考虑一下List
也一样吗?反之亦然(假设没有重复元素)?