按升序和降序对List进行排序后,我想调用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 :(得分:0)
来自Collections.binarySearch的文档:
在进行此调用之前,必须根据元素的自然顺序(通过sort(List)方法)将列表分类为升序。如果未排序,则结果未定义。