Consider the following 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));
}
This prints:
[Bob, Tom, Sam]
[Sam, Bob, Tom]
true
Yet if you change 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));
}
it produces:
[Bob, Tom, Sam]
[Sam, Bob, Tom]
false
My question is one of clarification. Can someone help make sense of this? Why would a LinkedHashSet
be considered equals whereas the same LinkedList
would not? I'm assuming the definition of List
and Set
plays a role, but I'm not sure.
Basically, I'm saying if you consider the Set
s to be the same, wouldn't you consider the List
s to be the same too? And vice-versa (assuming no duplicate elements)?