获取Java集合二进制搜索以返回多个值

时间:2012-08-05 06:08:44

标签: java collections binary-search

我想知道是否有办法让Java中的二进制搜索返回值的多个实例。例如,我有一个Items的ArrayList,其中一个字段是一个String数组的关键字。有没有比使用contains()方法的线性搜索更快的方法来按关键字检索项目并将它们存储在单独的集合中?或者通过诸如作者的字符串?

...Item...
private String[] keywords;
private String author;
...

3 个答案:

答案 0 :(得分:5)

您几乎肯定希望对同一个集合有不同的看法。例如,您可以:

  • 所有项目的List<Book>
  • “作者”查找的Multimap<String, Book>
  • Multimap<String, Book>用于“按关键字”查找(同一本书可以出现在多个条目中)

如果我写这篇文章,Multimap可能会在Guava中实现,但其他人也可以使用。

当然,假设您确实希望避免线性扫描。您的代码需要扩展多少?

答案 1 :(得分:2)

虽然我强烈鼓励JonSkeet的建议,但是一旦你获得了二元搜索的结果,你就可以向后探索&amp;从结果索引转发,寻找不再支持您的标准的值,只是一个建议;)

答案 2 :(得分:0)

我不完全理解您的问题,但您可以将复杂的自定义Comparator传递给binarySearch以处理其中一些棘手的案例。