【发布时间】:2014-02-11 01:36:27
【问题描述】:
我有一个包含学生信息的文本文件。我使用实现comparator 接口的比较器类对这些信息进行排序。调用Collection.Sort(); 时排序很好
然后我在binarySearch() 方法中使用comparator。我有一个 int 索引,它返回二进制搜索的索引。调试后,binarySearch() 似乎没有正确排序数据,因为我得到的 501 的索引为 0,这是正确的,503 的索引为 1,这是不正确的,502 的索引为 -2。binarySearch没有适当地使用比较器,因此没有适当地对数据进行排序,因为它以原始形式返回数据。
=================================================
First Name: Mark
Last Name: Evans
Registration: 501
Subject: Maths
Assignment: 1
Homewok Mark: 70
Exam Mark: 80
Assignment: 2
Homewok Mark: 70
Exam Mark: 40
Subject: English
Assignment: 1
Homewok Mark: 40
Exam Mark: 50
Assignment: 2
Homewok Mark: 60
Exam Mark: 70
Subject: Science
Assignment: 1
Homewok Mark: 50
Exam Mark: 60
Assignment: 2
Homewok Mark: 80
Exam Mark: 45
Assignment: 3
Homewok Mark: 67
Exam Mark: 47
Assignment: 4
Homewok Mark: 38
Exam Mark: 57
=================================================
First Name: Linda
Last Name: Evans
Registration: 503
Subject: Maths
Assignment: 1
Homewok Mark: 50
Exam Mark: 60
Assignment: 2
Homewok Mark: 70
Exam Mark: 50
=================================================
First Name: Joseph
Last Name: Evanw
Registration: 502
Subject: English
Assignment: 1
Homewok Mark: 40
Exam Mark: 50
我有一个比较器类可以正常工作并适当地对数据进行排序。
public class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
int registrationNumber1 = s1.getRegistrationNumber();
int registrationNumber12 = s2.getRegistrationNumber();
return registrationNumber1 - registrationNumber12;
}
}
public void searchStudentByName() {
int number = 503;
int subjectNumber = 1;
int index = Collections.binarySearch(studentList, new Student(number),
new StudentComparator());
for (int i = 0; studentList.size() > i; i++) {
if (i == index) {
System.out.print(studentList.get(i));
}
}
}
【问题讨论】:
-
您调用
binarySearch()时列表是否已排序? -
studentList的类型是什么?无论如何,binarySearch根本不起作用,除非您搜索的列表已经排序。否则你只会得到垃圾。请参阅文档here。 -
如果您事先对其进行排序,能否向我们展示您用于对其进行排序的代码,以确保您使用的是正确的排序方式? (此外,您可能希望在执行
binarySearch之前添加一些打印出来自studentList的所有注册号的内容,以确保它已排序。) -
大声感谢@Bohemian 我认为比较器完成了所有的排序 x-X
标签: java sorting collections binary-tree