- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
创建了一个实现Comparable
的静态嵌套类,并重写 Object.equals 使得 e1.compareTo(e2)==0
和 e1.equals( e2)==true
不是同义词。
然后我使用它的 add 方法将对象分别添加到 TreeSet
和 HashSet
中。
我希望将多个这样的对象插入到 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/
美好的一天。 我使用TreeSet ,例如TreeSet t 。我想打印集合 t 中 x 和 y 之间的所有数字。 void print(Integer x,Integer y, TreeSet t)
我想要使用属性“sort_1”排序的对象列表。但是当我想删除时,我希望它使用属性“id”。以下代码代表问题。 package javaapplication1; import java.util.Tr
我已经向 TreeSet 添加了一些简单的对象,但是当我调用 TreeSet 的 remove() 和 contains() 方法时,它们不起作用。但是,当我遍历集合时,对象被打印出来。应将员工对象添
我是一名优秀的程序员,十分优秀!