Java Collection 使用比较器的二进制搜索不工作
Java Collection Binary Search using Comparator not working
我的 Java Collection 的二进制搜索工作不正常。它能够找到一些元素,但找不到一些元素。我不知道是什么问题。列表的大小是否有限制?我正在使用 java 7. 或者我的二分查找实现有问题?
List<ManageDiseaseSearchBean> allDiseaseList=diseaseController.fetchAllDiseases();
// It fetches all diseases from database -- ordered by diseaseName asc. It has 12000 records
class SortingComp implements Comparator<ManageDiseaseSearchBean> {
@Override
public int compare(ManageDiseaseSearchBean o1, ManageDiseaseSearchBean o2) {
return o1.getDiseaseName().compareTo(o2.getDiseaseName());
}
}
Collections.sort(allDiseaseList,new SortingComp());
//sorting done via comparator
//searching implementation
class DiseaseNameComp implements Comparator<ManageDiseaseSearchBean>{
public int compare(ManageDiseaseSearchBean e1, ManageDiseaseSearchBean e2) {
return e1.getDiseaseName().trim().compareToIgnoreCase(e2.getDiseaseName().trim());
}
}
ManageDiseaseSearchBean searchKey = new ManageDiseaseSearchBean();
searchKey.setDiseaseName(diseaseName);
searchKey.setDiseaseCode(orphaNumber);
int index = Collections.binarySearch(allDiseaseList, searchKey, new DiseaseNameComp());
多么愚蠢的错误...排序时我应该忽略大小写
下面的东西现在可以使用了
List<ManageDiseaseSearchBean> allDiseaseList=diseaseController.fetchAllDiseases();
class DiseaseNameComp implements Comparator<ManageDiseaseSearchBean>{
public int compare(ManageDiseaseSearchBean e1, ManageDiseaseSearchBean e2) {
return e1.getDiseaseName().trim().compareToIgnoreCase(e2.getDiseaseName().trim());
}
}
Collections.sort(allDiseaseList,new DiseaseNameComp());
ManageDiseaseSearchBean searchKey = new ManageDiseaseSearchBean();
searchKey.setDiseaseName(diseaseName);
searchKey.setDiseaseCode(orphaNumber);
int index = Collections.binarySearch(allDiseaseList, searchKey, new DiseaseNameComp());
我的 Java Collection 的二进制搜索工作不正常。它能够找到一些元素,但找不到一些元素。我不知道是什么问题。列表的大小是否有限制?我正在使用 java 7. 或者我的二分查找实现有问题?
List<ManageDiseaseSearchBean> allDiseaseList=diseaseController.fetchAllDiseases();
// It fetches all diseases from database -- ordered by diseaseName asc. It has 12000 records
class SortingComp implements Comparator<ManageDiseaseSearchBean> {
@Override
public int compare(ManageDiseaseSearchBean o1, ManageDiseaseSearchBean o2) {
return o1.getDiseaseName().compareTo(o2.getDiseaseName());
}
}
Collections.sort(allDiseaseList,new SortingComp());
//sorting done via comparator
//searching implementation
class DiseaseNameComp implements Comparator<ManageDiseaseSearchBean>{
public int compare(ManageDiseaseSearchBean e1, ManageDiseaseSearchBean e2) {
return e1.getDiseaseName().trim().compareToIgnoreCase(e2.getDiseaseName().trim());
}
}
ManageDiseaseSearchBean searchKey = new ManageDiseaseSearchBean();
searchKey.setDiseaseName(diseaseName);
searchKey.setDiseaseCode(orphaNumber);
int index = Collections.binarySearch(allDiseaseList, searchKey, new DiseaseNameComp());
多么愚蠢的错误...排序时我应该忽略大小写 下面的东西现在可以使用了
List<ManageDiseaseSearchBean> allDiseaseList=diseaseController.fetchAllDiseases();
class DiseaseNameComp implements Comparator<ManageDiseaseSearchBean>{
public int compare(ManageDiseaseSearchBean e1, ManageDiseaseSearchBean e2) {
return e1.getDiseaseName().trim().compareToIgnoreCase(e2.getDiseaseName().trim());
}
}
Collections.sort(allDiseaseList,new DiseaseNameComp());
ManageDiseaseSearchBean searchKey = new ManageDiseaseSearchBean();
searchKey.setDiseaseName(diseaseName);
searchKey.setDiseaseCode(orphaNumber);
int index = Collections.binarySearch(allDiseaseList, searchKey, new DiseaseNameComp());