gpt4 book ai didi

java - 相等元素和树集

转载 作者:行者123 更新时间:2023-11-29 09:52:00 25 4
gpt4 key购买 nike

创建了一个实现Comparable 的静态嵌套类,并重写 Object.equals 使得 e1.compareTo(e2)==0e1.equals( e2)==true 不是同义词。

然后我使用它的 add 方法将对象分别添加到 TreeSetHashSet 中。

我希望将多个这样的对象插入到 TreeSet 或 HashSet 中会成功,因为两者都声称依赖于 equals 来确定唯一性,但我发现将多个这样的对象插入到 TreeSet 中会失败,而将它们插入 HashSet 将会成功。

public class Test {

/*
* This inner class deliberately has a compareTo method that is not
* consistent with equals
*/
static class TestObject implements Comparable<TestObject> {
@Override
public int compareTo(TestObject arg0) {
// No two of these objects can be ordered
return 0;
}

@Override
public boolean equals(Object arg0) {
// No two of these objects are ever equal to each other
return false;
}
}

public static void printSuccess(boolean success) {
if (success)
System.out.println(" Success");
else
System.out.println(" Failure");
}

public static void main(String[] args) {
TreeSet<TestObject> testTreeSet = new TreeSet<TestObject>();
HashSet<TestObject> testHashSet = new HashSet<TestObject>();

System.out.println("Adding to the HashSet:");
printSuccess(testHashSet.add(new TestObject()));
printSuccess(testHashSet.add(new TestObject()));
printSuccess(testHashSet.add(new TestObject()));

System.out.println("Copying to the TreeSet:");
for (TestObject to : testHashSet) {
printSuccess(testTreeSet.add(to));
}
}
}

上面程序的输出是

Adding to the HashSet:
Success
Success
Success
Copying to the TreeSet:
Success
Failure
Failure

有人能告诉我为什么 Tree set 会这样吗?

最佳答案

“TreeSet 实例使用其 compareTo(或比较)方法执行所有元素比较,因此从集合的角度来看,被此方法视为相等的两个元素是相等的”。 https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html你的 compareTo 说他们都是平等的。

关于java - 相等元素和树集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43845136/

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