0

リストがありますgotitems

ArrayList<String> gotitems = new ArrayList<String>();

そのリストを というハッシュマップに入れる必要がありますmap

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

私はこれを試しました:

for(String s:gotitems){
     map.put("a",s);
}

gotitems には以下が含まれます:

First
Second
Third

しかし、の出力:

System.out.println(map.values());

与える:

Third
Third
Third

私もこれを試しました:

for(String s:gotitems){
    for(int j=0;j<gotitems.size();j++){
          map.put("a"+j,s);
    }
}

しかし、これも機能していません。

ここで何が間違っていますか?

4

8 に答える 8

2

Map put(K,V) method docsに従って

指定された値をこのマップ内の指定されたキーに関連付けます (オプションの操作)。マップに以前にキーのマッピングが含まれていた場合、古い値は指定された値に置き換えられます。

ここで毎回キーをオーバーライドしています。

 for(String s:gotitems){
         map.put("a",s);
    }

毎回キーを変更して、次のように試してください

for(String s:gotitems){
     map.put(s,s);
}
于 2013-07-04T07:37:28.703 に答える
0

これは、マップ内のすべてのアイテムを同じキー「a」に対して配置しているためです。

map.put("a");

各要素を一意のキーに対して保存する必要があるため、次のようなものを追加します。

int count = 0;
for(String s:gotitems){
     map.put("a" + count,s);
     count++;
}
于 2013-07-04T07:37:07.493 に答える
0

マップ内の同じキーの下に 3 つの文字列を配置しようとしています"a"。値には一意のキーを使用するようにしてください。

于 2013-07-04T07:38:18.403 に答える
0

すべてのアイテムをMap同じキー「a」で配置しています。String値ごとに一意のキーが必要です。

例えば:

List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
Map<String, String> map = new LinkedHashMap<String, String>();
for (String s: list) {
    map.put(s, s);
}
System.out.println(map);

出力:

{one=one, two=two, three=three}

ここに注意してLinkedHashMapください: キーと値のペアを配置する順序が維持されます。

編集もちろん、Listに一意の値がない場合、その値をキーとして に移動するMapと、 の値の一部が上書きされMapます。その場合List、最初に一意のキーがあることを確認するか、の値Map<Integer, String>のインデックスを のListキーとして使用Mapし、実際のList値を の値として使用しますMap

于 2013-07-04T07:39:02.683 に答える
0

あなたが書くとき

for(String s:gotitems){
     map.put("a",s);
}

キー「a」に対して保持されているマップ内の既存のエントリを破棄します。したがって、反復後、マップには の最後の反復値に対応するエントリが 1 つだけ含まれますgotitems

マップを効果的に使用するには、キーが何であるかを考慮する必要があります。次に、map.put(myKeyForThisItem, s)代わりに使用します。キーの効果的なスキームがない場合、キーを使用して対応する値を抽出する傾向があるため、マップを使用しても意味がありません。

2 番目のアプローチについては、「機能していません」をもう少し明確に定義できれば役に立ちます。おそらく、マップを反復処理して、キーと値を出力します。

于 2013-07-04T07:39:17.657 に答える