黑马程序员技术交流社区

标题: 关于Collections工具类的binarySearch方法如何使用 [打印本页]

作者: 圣光忏悔    时间: 2015-3-30 17:40
标题: 关于Collections工具类的binarySearch方法如何使用
当查找的是元素的时候直接传递已排序的List集合和要查找的对象即可返回索引,但是要查找的是对象的时候就不明白了
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
          使用二分搜索法搜索指定列表,以获得指定对象。
要传递三个参数,前两个不变,第三次需要传递一个排序方法,但是不管我排序方法怎么写,查找的返回值都是1
在对象Student里面实现了comparator借口没用.在储存完毕之后用集合方法排序也没用.
想传递参数的时候不传递第三个参数,排序方法的时候应该就能出正确的结果了,但是如果查找的是对象一样出错
The method binarySearch(List<? extends Comparable<? super T>>, T) in the type Collections is not applicable for the arguments (ArrayList<Student>, Student)
以下是代码
  1. public class ArrayListDemo2 {
  2.         public static void main(String[] args) {
  3.                 // 创建集合对象
  4.                 ArrayList<Student> array = new ArrayList<Student>();

  5.                 // 创建学生对象
  6.                 Student s1 = new Student("武松", 30);
  7.                 Student s2 = new Student("鲁智深", 40);
  8.                 Student s3 = new Student("林冲", 36);
  9.                 Student s4 = new Student("杨志", 38);

  10.                 // 添加元素
  11.                 array.add(s1);
  12.                 array.add(s2);
  13.                 array.add(s3);
  14.                 array.add(s4);

  15.                 // 将集合排序
  16.                 Collections.sort(array, new Comparator<Student>() {

  17.                         @Override
  18.                         public int compare(Student o1, Student o2) {
  19.                                 int sum = o2.getAge() - o1.getAge();
  20.                                 int sum2 = sum == 0 ? o2.getName().compareTo(o2.getName()) : 0;
  21.                                 return sum2;
  22.                         }
  23.                 });

  24.                 // 遍历该集合
  25.                 for (int x = 0; x < array.size(); x++) {
  26.                         Student s = (Student) array.get(x);
  27.                         System.out.println(s.getName() + "---" + s.getAge());
  28.                 }

  29.                 // 查找
  30.                 System.out.println(Collections.binarySearch(array, s3,
  31.                                 new Mycomparator()));

  32.                 System.out.println("----------------");
  33.         }
  34. }
复制代码


如何才能完成用此方法对Student的对象进行二分查找?
作者: 圣光忏悔    时间: 2015-3-30 17:41
无论我查找的是s1还是s2还是s3其结果返回的都是1
作者: JarryHorse    时间: 2015-3-30 18:44
是不是你跟你排序和查找时用了两个不同的比较器有关啊
作者: 圣光忏悔    时间: 2015-3-30 19:10
比较器试过了都不用,只用其中一个之类的都尝试过了,返回结果始终是1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2