2011-06-25 43 views
17

Giá trị trả lại bên trong Trình so sánh thực sự có ý nghĩa gì?Loại trả về từ một Công cụ so sánh

Ví dụ:

class TreeSetDemo 
{ 
    public static void main(String arg[]) 
    { 
     TreeSet t=new TreeSet(new MyComparator()); 
     t.add(new Integer(20)); 
     t.add(new Integer(10)); 
     t.add(new Integer(30)); 
     t.add(new Integer(100)); 
     System.out.println(t); 
    }  

    class MyComparator implements Comparator 
    {  
     public int compare(Object o1, Object o2) 
     { 
      return 0; 
     } 
    } 
} 

Nếu kiểu trả về là 1 thì nó thực sự trở

[20, 10, 30, 100]

Nếu kiểu trả về là -1 thì thực tế quay lại

[100, 30, 10, 20]

Nếu kiểu trả về là 0 thì nó thực sự trở

[20]

Hãy nói cho tôi biết điều này chỉ ra?

+3

thường '0' cho biết' == ',' 1' cho biết '>' và '-1' cho biết' <' –

+2

" 1 "," -1 "và" 0 "không phải là loại, nhưng giá trị. –

+1

Bộ so sánh nào được trình bày rất rõ trong tài liệu của nó. Hãy thử đọc một chút trước khi chỉ cần đặt một câu hỏi. – Dunes

Trả lời

48

Sự trở lại value (không type, loại là int) cho người gọi (điều sắp xếp dữ liệu):

-1 : o1 < o2 
0 : o1 == o2 
+1 : o1 > o2 

Nếu bạn luôn luôn trả về giá trị tương tự (o, 1, -1) cho so sánh, bất kể đó là đầu vào, sau đó bạn không sử dụng nó một cách chính xác. Ý tưởng là cấu trúc dữ liệu (hoặc máy phân loại) gọi hàm so sánh bất cứ khi nào cần đặt hai phần tử, để tìm ra thứ tự để đưa chúng vào.

Cần lưu ý rằng các giá trị số nguyên dương/âm (-1, +1) không cần phải là 1, chúng có thể là số dương/âm. Đó là thực tế phổ biến để trả về -1/+ 1.

0

Đó là về thuật toán sắp xếp cần so sánh.

Đúng:

class MyComparator implements Comparator<Integer> { 
    public int compare(Integer o1, Integer o2) { 
     return o1.complare(o2); 
    } 
} 
1

Bạn đang bối rối trở lại kiểutrở lại giá trị. Kiểu trả về là int. Giá trị trả về được mô tả trong documentation:

Trả về một số nguyên âm, bằng không, hoặc một số nguyên dương như là đối số đầu tiên nhỏ hơn, bằng hoặc lớn hơn thứ hai.

1

Comparator documentation - Trả về: số nguyên âm, số không hoặc số nguyên dương làm đối số đầu tiên nhỏ hơn, bằng hoặc lớn hơn số thứ hai.

0

Tùy thuộc vào cách bạn muốn sắp xếp dựa trên trình so sánh này, bạn cần đặt một số logic trong trình so sánh.so sánh của bạn chỉ trả về 0 có nghĩa là bình đẳng

class MyComparator implements Comparator { 

    public int compare(Object o1, Object o2) { 
     // TODO Auto-generated method stub 
     return o1.compareTo(o2); 
    } 
} 
+1

Tôi không nghĩ rằng điều này sẽ biên dịch, vì 'Object' không thể so sánh được. –

1

cách so sánh được thừa hưởng ở đây là sai, nhưng để làm rõ nghi ngờ của bạn tại sao chỉ [20] id được viết khi giá trị trả về là 0 ...

Bạn đang sử dụng một số TreeSet không chứa các giá trị giống hệt nhau (Thuộc tính của Tập hợp). Vì vậy, khi các giá trị được so sánh và giá trị trả lại là số không, Java coi chúng như nhau và chỉ giữ lại giá trị đầu tiên. Do đó, bạn chỉ nhìn thấy một giá trị trả lại.

Các vấn đề liên quan