2016-07-14 21 views
0

我々はMap<String,List<String>> = new HashMap<String, List<String>>(); を行うと、それは空のマップを作成しますがListが同様に空のマップ内にあるか、それがNULL値ですか?メモリassignement <文字列、リスト<String>>

+4

'Map'の中に' List'sはありません。空っぽです。 'get'を呼び出すと、引数の値は' null'を返します。 – resueman

+4

コレクションをインスタンス化すると、コレクションは空になります。初期容量は 'null'値なので、この場合は' List'はありません。 – Zircon

+0

ありがとう!私はあまりにも思ったが、ちょうどその場合に確認する必要がある –

答えて

0

あなたのコード:

Map<String,List<String>> = new HashMap<String, List<String>>(); 

はパラメータ化のHashMapのインスタンス化に関係します。ジェネリック型を使用して、キーのTYPEがStringでなければならず、TYPEの値がList<String>である必要があるというジェネリックタイプを強制しています。個別に作成したList<String>オブジェクトをマップに追加するまでは、メモリにList<String>はありません。これは次のようになります。

Map<String, List<String>> myMap = new HashMap<>();//BTW, You only need to parameterize the object declaration since Java 7 

List<String> names = new ArrayList<String>(); 
names.add("Betty"); 
names.add("Bob"); 
names.add("Jessica"); 
names.add("Jim"); 
myMap.put("names", names);//Where "names" is your key and names is your value. 

続きを続行して、そこからマップにリストを追加できます。

1

ある程度、これは使用しているコレクションの種類によって異なります。ハッシュマップまたはハッシュセットは、後で追加される可能性のあるオブジェクトのためのスペースを割り当てません。そのため、マップを作成するときに、正確にその1つのマップまたはオブジェクトを設定するための "コスト"しかかかりません。

ArrayListの場合、これは異なります。これらは初期容量(デフォルトは10)を使用して作成されます。 ArrayList<String>を作成すると、文字列の配列(その意味ではString[10])が割り当てられます。したがって、HashMap<String, List<String>>List<Map<Whatever, NotOfInterest>>よりも「安い」です。

一方、これは本当に心配するものではありません。 「組み込みコンピューティング」(あるいは何百万ものオブジェクトを常に扱っている)で作業している場合を除き、Javaコレクションのメモリ(またはパフォーマンス)コストではなく、良いOO設計を心配する必要があります。

+1

Eh?ヌルで埋められた 'String [10]'は、ヌルで埋められた 'SuperMassiveObject [10]'とまったく同じ量のメモリを取ります。どちらも参照を格納し、オブジェクト自体は格納せず、すべての参照が同じサイズになります。 –

+0

しかし、10項目の配列が作成されます。それがポイントです! – GhostCat

+0

私はこの空のマップを使用しており、計算結果をそこに格納しています。しかし、条件が満たされない場合、空のマップがそのまま返される可能性があります。私はマップを返され、この上のストリームを使用する必要がありますが、マップが空の場合、このマップがnullではないの内側に、私はそれ以外のストリームが、私はこのマップ内で必ずリストを行う必要がある」 –

0

受け入れられる回答:コレクションをインスタンス化すると、それは空です。初期容量はすべてNULL値であるため、この場合はリストはありません。 - ジルコン

+0

あなたはおそらくこの源を参照したいと思うでしょう –

+0

あなたは正しいです! –

関連する問題