当查找的是元素的时候直接传递已排序的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)
以下是代码
- public class ArrayListDemo2 {
- public static void main(String[] args) {
- // 创建集合对象
- ArrayList<Student> array = new ArrayList<Student>();
- // 创建学生对象
- Student s1 = new Student("武松", 30);
- Student s2 = new Student("鲁智深", 40);
- Student s3 = new Student("林冲", 36);
- Student s4 = new Student("杨志", 38);
- // 添加元素
- array.add(s1);
- array.add(s2);
- array.add(s3);
- array.add(s4);
- // 将集合排序
- Collections.sort(array, new Comparator<Student>() {
- @Override
- public int compare(Student o1, Student o2) {
- int sum = o2.getAge() - o1.getAge();
- int sum2 = sum == 0 ? o2.getName().compareTo(o2.getName()) : 0;
- return sum2;
- }
- });
- // 遍历该集合
- for (int x = 0; x < array.size(); x++) {
- Student s = (Student) array.get(x);
- System.out.println(s.getName() + "---" + s.getAge());
- }
- // 查找
- System.out.println(Collections.binarySearch(array, s3,
- new Mycomparator()));
- System.out.println("----------------");
- }
- }
复制代码
如何才能完成用此方法对Student的对象进行二分查找? |
|