Метод Equals в HashSet

Я пытаюсь понять TreeSet. Я создал объект «Сотрудник» и пытаюсь добавить объект «Сотрудник» в TreeSet. чтобы реализовать это, я создал класс sortName, который сортирует объекты сотрудников по имени. и я также написал метод equals (просто для понимания потока выполнения). Я читал, что в TreeSet для добавления элементов в какую-то сортировку мы должны реализовать интерфейс компаратора и перезаписать два метода (compare и equals), конечно, equals не является обязательным. Когда я пытаюсь запустить программу, она работает, я заметил, что метод equals никогда не вызывается, почему?

Давайте проведем сравнение между HashSet и TreeSet. в HashSet, когда хэш-код такой же, он проверяет метод равенства, иначе нет. Мне интересно узнать, как работает 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 с двумя равными объектами?


person User27854    schedule 14.03.2014    source источник
comment
Вы можете напрямую заглянуть в исходный код. TreeSet использует не метод equals(), а метод compareTo или метод compare(), в зависимости от того, что применимо.   -  person Rohit Jain    schedule 14.03.2014
comment
пробовал не работает..   -  person User27854    schedule 14.03.2014


Ответы (1)


TreeSet не нужно использовать метод equals, потому что он получает всю необходимую информацию из метода compare класса Comparator (или метода compareTo, если он полагается на то, что его элементы являются Comparable). В любом случае можно определить, эквивалентны ли элементы, если соответствующий метод возвращает 0.

person rgettman    schedule 14.03.2014
comment
Поправьте меня, если я ошибаюсь. Таким образом, в TreeSet никогда не вызывается метод equals. Я имею в виду для сравнения. - person User27854; 14.03.2014
comment
Ты прав. Метод equals не вызывается в TreeSet. В том виде, в котором он у вас есть, вы никогда не увидите напечатанного равенства, и вы увидите напечатанное сравнение, когда вы вызываете метод TreeSet, такой как add. - person rgettman; 14.03.2014