Search code examples
javacomparatorbinary-search

Java Collection Binary Search using Comparator not working


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());

Solution

  • 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());