Я хотел бы знать, что это означает, когда 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
хеширует объект?