Tôi muốn biết ý nghĩa của nó khi javadocs cho TreeSet nói 'Lớp này thực hiện giao diện Set, được hỗ trợ bởi một cá thể TreeMap'? Trong ví dụ dưới đây, tôi chưa triển khai phương thức Hashcode và nó vẫn hoạt động như mong đợi, tức là nó có thể sắp xếp các đối tượng. Lưu ý rằng tôi đã cố tình không triển khai thực hiện Equals nhất quán để kiểm tra hành vi TreeSet.TreeSet sử dụng nội bộ TreeMap, do đó, nó là cần thiết để thực hiện phương pháp Hashcode khi sử dụng 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);
}
}
Ví dụ này in [Tom Ben, Tom jon, Tom Wik] Vì vậy, nó được phân loại dựa trên phương thức compareTo và hashcode() phương pháp trông giống như không đáng kể trong scenario.However này, TreeSet được hỗ trợ bởi TreeMap, nội bộ nếu TreeMap được sử dụng để phân loại, treeMap băm như thế nào?
Tôi đã chỉnh sửa câu hỏi để cung cấp thêm thông tin cho bạn. – Metalhead
Không cần thêm thông tin - hãy thử những gì tôi đề xuất và bạn sẽ thấy ý tôi! – Russell
Tôi hơi say. Cú pháp phương thức equals của tôi là không đúng. Tôi đã sử dụng bằng() :( – Metalhead