0

Java で Binary Search を取得して値の複数のインスタンスを返す方法があるかどうか疑問に思っています。たとえば、1 つのフィールドがキーワードの文字列配列である項目の ArrayList があります。contains() メソッドを使用してキーワードでアイテムを取得し、それらを別のコレクションに保存する線形検索よりも速い方法はありますか? それとも Author のような文字列で?

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

3 に答える 3

5

ほとんどの場合、同じコレクションに対して異なるビューを使用する必要があります。たとえば、次のようにすることができます。

  • List<Book>すべての項目の A
  • Multimap<String, Book>「著者による」ルックアップ用の A
  • Multimap<String, Book>キーワードによる」ルックアップ用 (同じ書籍が複数のエントリに表示される場合)

私がこれを書いていたら、おそらくGuavaMultimapでの実装になるでしょうが、他のものも利用できます。

もちろん、それはあなたが本当に線形スキャンを避けたいと思っていることを前提としています. コードをどれだけスケーリングする必要がありますか?

于 2012-08-05T06:12:54.500 に答える
2

JonSkeetの提案を強くお勧めしますが、バイナリ検索の結果が得られたら、結果のインデックスから前後に探索し、基準をサポートしなくなった値を探して、単なる提案にすぎません;)

于 2012-08-05T07:19:38.207 に答える
0

私はあなたの質問を完全には理解していませんが、これらのトリッキーなケースのいくつかを処理するために、複雑なカスタム Comparator を binarySearch に渡すことができます。

于 2012-08-05T06:19:10.213 に答える