web-dev-qa-db-ja.com

リストとマップJava

Javaでのマップの意味がわかりませんでした。リストの代わりにマップを使用することが推奨されるのはいつですか?

前もって感謝します、

どこにも

24
JBeg

Javaマップ:キーを値にマップするオブジェクト。マップに重複するキーを含めることはできません。各キーは最大で1つの値にマッピングできます。

Javaリスト:順序付けられたコレクション(シーケンスとも呼ばれます)。このインターフェイスのユーザーは、リスト内の各要素を挿入する場所を正確に制御できます。ユーザーは、整数インデックス(リスト内の位置)によって要素にアクセスし、リスト内の要素を検索できます。

違いは、それらが異なるということです。マップは、キー/値のマッピング、アイテムのリストのリストです。

22
Chris

名前と学生IDを持つ学生がたくさんいるとします。それらをリストに入れた場合、student_id = 300の生徒を見つける唯一の方法は、適切な生徒が見つかるまで、リストの各要素を1つずつ調べることです。

マップを使用して、各学生のIDと学生インスタンスを関連付けます。 「get me student 300」と言って、すぐにその生徒を取り戻すことができます。

コレクションから特定のメンバーを選択する必要がある場合は、マップを使用します。意味がない場合は、リストを使用してください。

生徒のインスタンスはまったく同じだったが、すべての生徒の名前のレポートを作成することがあなたの仕事だったとします。個々の生徒を選択する必要がないため、マップを必要としないため、それらをリストに入れます。

39
Tony Ennis

ランダムアクセス Vs シーケンシャルアクセスデータ構造 を改訂することはおそらく良い考えです。どちらも実行時の複雑さが異なり、異なるタイプのコンテキストに適しています。

4
rkg

パフォーマンスの問題によって異なります。より明確にマップはHashMapが挿入と削除でO(1)を保証します。リストは最悪の場合O(n)でアイテムを検索します。したがって、あなたがあなたのシナリオが何であるかについて詳述するほど親切であるならば、我々はより多くを助けるかもしれません。

3
Woot4Moo

データにどのようにアクセスしたいかという問題はたくさんあると思います。マップを使用すると、既知のキーを使用してアイテムに「直接」アクセスできます。リストでは、ソートされている場合は、それを検索する必要があります。

比較:

List<MyObject> list = new ArrayList<MyObject>();
//Fill up the list
// Want to get object "peter"
for( MyObject m : list ) {
 if( "peter".equals( m.getName() ) {
    // found it
 }
}

地図であなたはただタイプすることができます

Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");

処理するデータがあり、とにかくすべてのオブジェクトでそれを行う必要がある場合は、リストが必要です。よく知られているキーで単一のオブジェクトを処理する場合は、マップの方が適しています。それは完全な答えではありません(ちょうど私の2 ...)が、私はそれがあなたを助けるかもしれないと思います。

2
InsertNickHere

マップは、キーと値の関連付けとして使用されます。リストを使用すると、基本的に値のみが得られます。
リストのインデックスは常にintですが、マップでは別のオブジェクトをキーとして持つことができます。


リソース:

2
Colin Hebert

リストの代わりにマップしたいとき。これらのインターフェースの名前には意味があり、無視しないでください。

データ構造でキーから値へのマッピングを表現する場合は、マップを使用します。データを任意の順序付けられた形式で保存する場合は、リストを使用します。

1

MapListは目的が異なります。

Listはアイテムのコレクションを保持します。注文済み(アイテムはインデックスで取得できます)。

Mapは、マッピングキー->値を保持します。例えば。人を位置にマップします: "JBeg"-> "programmer"。そして、それは順不同です。キーで値を取得できますが、インデックスでは取得できません。

0
amorfis

マップはデータオブジェクトを一意のキーで保存するため、保存されたオブジェクトへの高速アクセスを提供します。マルチスレッド環境で並行性を実現するために、ConcurrentHashMapを使用できます。リストは重複したデータを格納する可能性があるため、特定の要素にアクセスするにはデータ要素を反復処理する必要があるため、格納されたオブジェクトへのアクセスは遅くなります。要件に応じて、任意のデータ構造を選択できます。

0
Rizwan Mushtaq