Java二进制搜索已经排序列表

时间:2016-12-27 07:26:51

标签: java list binary-search

我使用 ORDERED BY 进行数据库查询,并将相应的结果集处理为自定义对象列表。

对象类没有实现Comparable。但是,它使用 ORDERED BY 中使用的相同字段覆盖 equals()和hashcode()

由于列表已经排序,如何使用排序字段作为键并且没有可比较的或比较器来对列表进行二进制搜索?

2 个答案:

答案 0 :(得分:3)

总之 - 你做不到。至少不是JDK的二进制搜索。 ComparableComparator是java表达顺序的方式。但这应该不是问题。即使您无法更改数据类,也可以始终使用自己的(匿名)Comparator

int index = Arrays.binarySearch(myArray, 
                                myObject,
                                Comparator.comparing(MyClass::getSomeField));

答案 1 :(得分:0)

为了使用groovy.lang.MissingPropertyException: No such property: TRACE for class: org.apache.log4j.Level之类的现有JDK方法,您必须实现Collections.binarySearch(因为您的类没有实现Comparator<YourCustomClass>)。

如果你不想实现Comparable,你必须自己实现整个二进制搜索逻辑,这比仅仅实现Comparator<YourCustomClass>更有用。