gpt4 book ai didi

java - 具有相同元素但不同顺序的 LinkedHashSet .equals() 与 LinkedList .equals()

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:39 28 4
gpt4 key购买 nike

考虑以下 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 更改为 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 却不会?我假设 ListSet 的定义起作用,但我不确定。

基本上,我是说,如果您认为 Set 是相同的,那么您不会认为 List 也是相同的吗?反之亦然(假设没有重复元素)?

最佳答案

LinkedHashSet 所做的保证是关于迭代顺序的。然而,它仍然是一个 Set 并且 set 本身并不关心顺序。另一方面,List 可以。一个元素位于第 3 个位置的 List 与另一个元素位于第 1 个位置的 List 不同。

设置 equals(Object) 的javadoc方法

Returns true if the specified object is also a set, the two sets have the same size, and every member of the specified set is contained in this set (or equivalently, every member of this set is contained in the specified set). This definition ensures that the equals method works properly across different implementations of the set interface.

LinkedHashSet javadoc 状态

Hash table and linked list implementation of the Set interface, with predictable iteration order.

LinkedHashSet 是一个Set。它具有相同的规则,即。适用于集合 ADT 的那些。

关于java - 具有相同元素但不同顺序的 LinkedHashSet .equals() 与 LinkedList .equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302096/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com