My Java Collection's Binary Search is not working properly. It is able to find some elements and fails to find some. I don't know what the issue is. Is there a limit on how much size the list should be? I am using java 7. Or my implementation for binary search is somehow wrong?
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());
What a stupid mistake... While sorting i should've sort by ignoring the case Below thing works now
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());