【问题标题】:Equals method in HashSetHashSet中的equals方法
【发布时间】:2014-03-14 16:04:22
【问题描述】:

我正在尝试理解 TreeSet。我创建了一个员工对象并尝试将员工对象添加到 TreeSet。为了实现这一点,我创建了一个名为 sortName 的类,它根据名称对员工对象进行排序。我也写了一个equals方法(只是为了理解执行流程)。我在 TreeSet 中读到要在某些排序中添加元素,我们必须实现比较器接口并覆盖两个方法(比较和等于)当然等于是可选的。当我尝试运行它工作的程序时,我观察到equals方法从未被调用,这是为什么呢?

让我们来比较一下HashSet和TreeSet。在 HashSet 中,当 hashCode 相同时,它会检查 equals 方法,否则不会。我有兴趣了解 TreeSet 的工作原理? 谁能给我一个例子,其中甚至为 TreeSet 调用 equals 方法?

public int compare(Object Obj1, Object Obj2) {
    System.out.println("compare");
    if (Obj1 instanceof Employee19 && Obj2 instanceof Employee19) {
        Employee19 emp1=(Employee19) Obj1;
        Employee19 emp2=(Employee19) Obj2;

        return emp1.sname.compareTo(emp2.sname);
    }
    return 0;
}

public boolean equals(Object obj){
    System.out.println("equals");
    return true;
}

我什至检查了这个链接,但那不是我想要的...... HashSet with two equals object?

【问题讨论】:

  • 可以直接看源码。 TreeSet 不使用equals() 方法,而是使用compareTo 方法或compare() 方法,无论哪个都适用。
  • 我试过它不工作..

标签: java collections treeset


【解决方案1】:

TreeSet 不需要使用equals 方法,因为它从Comparatorcompare 方法(或compareTo 方法,如果它依赖于它的元素是Comparable)。无论哪种方式都可以判断元素是否等效,如果适当的方法返回0

【讨论】:

  • 如果我错了,请纠正我。因此,在任何时候都不会在 TreeSet 中调用 equals 方法。我的意思是比较。
  • 你是对的。 equals 方法不会在 TreeSet 中调用。正如您所拥有的那样,当您调用 TreeSet 方法(例如 add)时,您将永远不会看到打印“等于”并且会看到打印“比较”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2017-11-19
  • 2015-02-25
  • 2011-11-06
  • 2014-01-03
  • 2013-07-28
相关资源
最近更新 更多