使用比较器的 Java 集合二分搜索不起作用

标签 java comparator binary-search

我的 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 集合二分搜索不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61272059/

相关文章:

java - 使用 lambda 迭代集合时使用 setter 方法

java-8 - Java 8 - 具有嵌套对象的比较器

java - 如何理解Java中比较器引发的顺序?

java - 如何使用递归创建二进制搜索算法

java - 如何从 Java 应用程序更改笔记本电脑屏幕亮度?

java - 如何避免使用缓存进行不必要的 Firestore 读取

Java 使用 Comparable 和多个排序标准对对象进行排序

c++ - 字符串数组的二进制搜索和额外功能

c - 用 C 进行二分查找

java - Apache HttpComponents 忽略重定向上的 POST 数据 (HTTP 302)