2013-02-15 121 views
0

按升序和降序對列表進行排序後,我想要調用binarySearch方法。 但它不工作,因爲我已經實施可比。collections.binarySearch()與可比較的不起作用

class Student implements Comparable<Student>{ 
private int id; 
private String name; 

public Student(int id, String name){ 
    this.id = id; 
    this.name = name; 
} 

public int getId(){ 
    return id; 
} 
public String getName(){ 
    return name; 
} 

@Override 
public int compareTo(Student o) { 

    int j = o.getId(); 
    int result = this.id - j; 
    return result; 
} 


} 
public class CollectionSearchDemo { 


public static void main(String[] args) { 

    List<Student> list = new ArrayList<Student>(); 
    list.add(new Student(3, "ouier")); 
    list.add(new Student(2, "fdgds")); 
    list.add(new Student(7, "kiluf")); 
    list.add(new Student(1, "6trfd")); 
    list.add(new Student(8, "hjgas")); 
    list.add(new Student(5, "ewwew")); 

    Collections.sort(list, new Comparator<Student>() { 

     @Override 
     public int compare(Student arg0, Student arg1) { 

      return arg0.getId() - arg1.getId(); 
     } 
    }); 

    Iterator iterator = list.iterator(); 
    while(iterator.hasNext()){ 
     Student student = (Student) iterator.next(); 
     System.out.print(student.getId()+":"+student.getName()+" "); 
    } 

    System.out.println("\nSorting in reverse order:"); 

// Collections.reverse(list); 
    Comparator<Student> collections = Collections.reverseOrder(); 
    Collections.sort(list, collections); 

    Iterator iterator1 = list.iterator(); 
    while(iterator1.hasNext()){ 
     Student student = (Student) iterator1.next(); 
     System.out.print(student.getId()+":"+student.getName()+" "); 
    } 

    System.out.println("I want to do searching "); 
    System.out.println("\n2 is at:"+Collections.binarySearch(list, 2, new Student())); 
      // facing exception at this line.I don't know what to use as argument of       binarySearch() method. 
} 

} 

我可以通過實施比較已經這樣做了,但我在我的項目,例如要求 請指引我。

+0

您已刪除方法調用的結尾:'Collections.binary' – jonasnas 2013-02-15 00:34:49

回答

0

從Collections.binarySearch的文檔:

列表必須被分類成根據其元素的自然順序升序(如通過sort(列表)方法)之前使該呼叫。如果沒有排序,結果是不確定的。