ランダム挿入で最適に機能するJavaコレクションの使用を検討しています。たくさん挿入して、最後に一度だけコレクションを読みます。
私が望む機能は、指定されたインデックス、<0、current_length>の間の任意の場所に要素を追加することです。どのコレクションを使用するのが最も効率的ですか?
ランダム挿入で最適に機能するJavaコレクションの使用を検討しています。たくさん挿入して、最後に一度だけコレクションを読みます。
私が望む機能は、指定されたインデックス、<0、current_length>の間の任意の場所に要素を追加することです。どのコレクションを使用するのが最も効率的ですか?
参考のための便利なリンク:http: //www.coderfriendly.com/wp-content/uploads/2009/05/java_collections_v2.pdf
入力後の情報をどのように読むか(そしてそれがあなたにとってどれほど重要か)は完全にはわかりません。HashmapまたはArrayListは、実行しようとしていることに応じて意味があります。また、スレッドセーフなものを探しているかどうかもわかりません。それが役に立てば幸い。
使用の非効率性はList
問題に特有のものです。javadocに記載されているように、何かを追加するたびに、後続のすべての要素のインデックスを再作成する必要があります。
現在その位置にある要素(存在する場合)と後続の要素を右にシフトします(インデックスに1つ追加します)。
あなたの質問/コメントから、あなたはたくさんのsを持っているように見えますObject
、そしてあなたはあなたが行くにつれてそれらを分類しています。この問題のより効率的な解決策は、Comparator
(またはオブジェクトを実装する)を記述してから(または)Comparable
を使用することです。Collections.sort(list, comparator)
Collections.sort(list)
Object
あなたはあなたのが他の変数に基づいてソートされていることを示唆するかもしれません。この場合、Object
他の変数をフィールドとして拡張Comparable
し、のようなメソッドを使用して、の拡張を作成できますgetOriginal()
。これらのラップされたオブジェクトをリストに追加し、並べ替えてからリストを反復処理し、元のオブジェクト(からgetOriginal()
)を新しいリストに追加します。
コレクションの並べ替えアルゴリズムの詳細については、このSOの質問を参照してください