我想知道是否有任何方法可以让 Java 中的二进制搜索返回一个值的多个实例。例如,我有一个项的 ArrayList,其中一个字段是关键字的字符串数组。有没有比使用 contains() 方法通过关键字检索项目并将它们存储在单独的集合中的线性搜索更快的方法?或者通过诸如作者之类的字符串?
...Item...
private String[] keywords;
private String author;
...
我想知道是否有任何方法可以让 Java 中的二进制搜索返回一个值的多个实例。例如,我有一个项的 ArrayList,其中一个字段是关键字的字符串数组。有没有比使用 contains() 方法通过关键字检索项目并将它们存储在单独的集合中的线性搜索更快的方法?或者通过诸如作者之类的字符串?
...Item...
private String[] keywords;
private String author;
...
您几乎肯定希望对同一个集合有不同的看法。例如,您可以:
List<Book>
所有项目中的 AMultimap<String, Book>
用于“按作者”查找Multimap<String, Book>
“按关键字”查找(同一本书可以出现在多个条目中)如果我正在写这个,Multimap
可能会是Guava中的一个实现,但其他的也可用。
当然,这是假设您真的想避免线性扫描。您的代码需要扩展多少?
虽然我强烈鼓励 JonSkeet 的建议,但一旦您从二分搜索中获得结果,您就可以从结果索引中向后和向前探索,寻找不再支持您的标准的值,只是一个建议;)
我不完全理解您的问题,但您可以将复杂的自定义 Comparator 传递给 binarySearch 来处理其中一些棘手的情况。