Chciałbym wiedzieć, co to znaczy, gdy javadocs dla TreeSet mówi "Ta klasa implementuje interfejs Set, wspierany przez instancję TreeMap"? W poniższym przykładzie nie zaimplementowałem metody Hashcode i nadal działa ona zgodnie z oczekiwaniem, tzn. Jest w stanie sortować obiekty. Zauważ, że celowo nie zaimplementowałem spójnej implementacji Równości, aby sprawdzić zachowanie TreeSet.TreeSet wewnętrznie używa TreeMap, więc czy jest wymagane wdrożenie metody Hashcode podczas korzystania z 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);
}
}
Ten przykład wypisuje [Ben Tom Tom Jon Tom wik] .Tak jest sortowane w oparciu o metodę CompareTo i hashcode() metoda wygląda nieistotne w tym scenario.However, TreeSet jest wspierany przez TreeMap, tak wewnętrznie, jeśli do sortowania jest używana TreeMap, w jaki sposób obiekt mapuje obiekt?
Poddałem edycji pytanie, aby uzyskać więcej informacji. – Metalhead
Nie potrzeba więcej informacji - spróbuj tego, co zasugerowałem, a zobaczysz, co mam na myśli! – Russell
Spieprzyłem. Moja równa składnia metody jest niepoprawna. Używam equal() :( – Metalhead