私はソートされたJava ArrayListを持っているとしましょう。今、私は値xのインデックスを探したいと思います。これを行うには、最速の方法(30行以上のコードなし)がありますか? IndexOf()メソッドの使用?単純なforループのすべての値を繰り返し処理しますか?いくつかのクールなアルゴリズムの使用? 50個の整数キーを考えてみましょう。リストがソートされているときにリスト内の値を見つける最良の方法
答えて
Binary searchですが、50アイテムしかないので、誰が気にしますか(何百万回もしなければならない場合を除きます)。単純な線形検索は簡単で、50項目のパフォーマンスの差はごくわずかです。
を編集する:組み込みのjava.util.Collections binarySearchメソッドを使用することもできます。項目が見つからない場合でも挿入ポイントが返されることに注意してください。アイテムが実際にあなたが望むものであることを確認するために、余分な数のチェックをする必要があります。ポインタのための@Matthewに感謝します。
tvanfossonが正しいとすれば、いずれかの時間が非常に短くなるため、このコードが頻繁に実行されない限り、大きな違いはありません。
しかし、Javaには、リスト(ArrayListsを含む)、バイナリ検索のための組み込み機能があります(Collections.binarySearch)。
キーが受け入れ可能な分布の場合、Interpolation Searchは実行時間を考慮すると非常に高速です。
コーディング時間を考慮すると、あなたのデータ型(私はC#から来て、Javaを知らない人)のためにavailiableであればバイナリ検索で組み込むことができます。
import java.util.ArrayList;
import java.util.Collections;
ArrayList myList = new ArrayList();
// ...fill with values
Collections.sort(myList);
int index = Collections.binarySearch(myList, "searchVal");
編集:未テストコード
コードありがとうございました:) – Baversjo
- 1. Java:ソートされたリスト内の要素を見つける最良の方法は何ですか?
- 2. ソートされていない配列の最大値を見つける方法
- 3. 番号リストの最小値と最大値を見つける方法
- 4. リスト内のリストのインデックスを見つける方法
- 5. 2つのパラメータに基づいてリスト内で最良の値を見つける
- 6. リスト内の最小の番号のインデックス値を見つける?
- 7. トラバースしてリストからオブジェクトフィールドを見つける最良の方法
- 8. 2dリストの最小値を見つけてそれを削除する方法
- 9. C++:リンクされたリスト内のクラスの最高値を見つける
- 10. リストをソートするインデックスシーケンスを見つける方法は?
- 11. k回以上存在するリスト内のすべての要素を見つける最良の方法
- 12. ソートされたリストをマージするアルゴリズムを見つける
- 13. kの最良値を見つける方法k-NNについては?
- 14. 2つのリスト内の対応を見つける最速の方法Python
- 15. リストのネストされたリストで空のリストを見つける
- 16. Maximaのリストで最大の価値とインデックスを見つける?
- 17. Pythonのリストで最大の価値とインデックスを見つける?
- 18. リストのみを使って最小値を見つける方法は?
- 19. リスト内のリストに一致する文字列を見つける方法?
- 20. リスト内の最も高い数字のインデックスを見つける
- 21. リストのリスト内の特定のリストを見つける
- 22. ファイル内の最小値/最大値を見つける方法
- 23. リストのすべてのアイテムにサブストリングとして存在するリスト内のアイテムを見つける方法
- 24. 親リスト内のリスト<>のメンバーの値をソートする方法リスト
- 25. max()を使ってリスト内のmax()を見つけ、そのインデックス値を見つける方法?
- 26. リスト内に最後に存在するDIRを見つける方法
- 27. max()リスト内の実際の最大値を見つけられない
- 28. いくつかのフィールドでソートされたN行ごとに最大値を見つける方法は?
- 29. Python - リスト内の最も高い整数のインデックス値を見つける
- 30. OpenCVバイナリイメージ内の接続されたコンポーネントのリストを見つける方法
50個のキーについて、私は完全に同意するものとします。開発者の時間は最近のCPU時間よりも重要です。 IndexOf()を使用し、あなたの方法であります。 –
Java/has/this機能を除いて。 –
バイナリ検索は道のりです。リストには現在50項目しかないかもしれないが、コードが1年か2年で扱うべきことが分かっている。 –