Java Сбор двоичного поиска с использованием Comparator не работает - PullRequest
0 голосов
/ 17 апреля 2020

My Java Двоичный поиск в коллекции не работает должным образом. Он может найти некоторые элементы и не может найти некоторые. Я не знаю, в чем проблема. Есть ли ограничение на размер списка? Я использую 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());

1 Ответ

0 голосов
/ 17 апреля 2020

Какая глупая ошибка ... При сортировке я должен был сортировать, игнорируя регистр. Теперь все работает

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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...