TreeSet внутренне использует TreeMap, поэтому необходимо ли реализовывать метод Hashcode при использовании Treeset?

Я хотел бы знать, что это означает, когда javadocsдля TreeSetговорит

Этот класс реализует Установить интерфейс, поддерживаемый экземпляром TreeMap?

В приведенном ниже примере я не реализовал метод Hashcode, и тем не менее он работает в соответствии с ожиданиями, т. е. способен сортировать объекты. Обратите внимание, что я намеренно не реализовал последовательную реализацию Equalsдля проверки поведения TreeSet.

import java.util.TreeSet;


public class ComparisonLogic implements Comparable<ComparisonLogic>{

String field1;
String field2;

public String toString(){
    return field1+" "+field2;
}

ComparisonLogic(String field1,String field2){
    this.field1= field1;
    this.field2= field2;

}
public boolean equal(Object arg0){
    ComparisonLogic obj = (ComparisonLogic) arg0; 

    if(this.field1.equals(obj.field1))
        return true;
    else
        return false;
}

public int compareTo(ComparisonLogic arg0){
    ComparisonLogic obj = (ComparisonLogic) arg0;   
    return this.field2.compareToIgnoreCase(obj.field2);
}

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    ComparisonLogic x = new ComparisonLogic("Tom", "jon");
    ComparisonLogic y = new ComparisonLogic("Tom", "Ben");
    ComparisonLogic z = new ComparisonLogic("Tom", "Wik");

    TreeSet<ComparisonLogic> set = new TreeSet<ComparisonLogic>();
    set.add(x);
    set.add(y);
    set.add(z);
    System.out.println(set);
}

}

В этом примере выводится [Tom Ben, Tom jon, Tom Wik]. Таким образом, сортировка, основанная на методе compareToи методе hashcode(), в данном сценарии выглядит незначительной. Однако Treesetподдерживается TreeMap, поэтому внутренне, если TreeMapиспользуется для сортировки, как TreeMapхеширует объект?

8
задан Prateek 3 February 2019 в 16:51
поделиться