2012-01-20 51 views
1

私はMapをJavaで記入する際に問題がありますが、これは簡単だと思いますが、解決できません。塗りつぶしマップ - java

はのは、このを見てみましょう:

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

String singleData[]; 

int lineCounter = 0; 
for (String line : this.lines) 
{ 
    singleData = line.split("\\|\\|"); 

    map.put("type", singleData[0]); 
    map.put("text", singleData[1]); 
    map.put("page", singleData[2]); 
    map.put("x", singleData[3]); 
    map.put("y", singleData[4]); 

    lineArrayData.put(lineCounter, map); 

    lineCounter++; 
} 

System.out.println(lineArrayData); 

私は入力

barcode||testowy test||1||100||100 
text||texttstdasd||2||500||300 

を持っており、私の出力は次のとおりです。

{0={text=texttstdasd, page=2, type=text, y=300, x=500}, 1={text=texttstdasd, page=2, type=text, y=300, x=500}} 

私が間違って何をしましたか?

+0

あなたは何をしたいですか? –

答えて

3

は、ループ内の次の行を移動:

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

をそれ以外の場合は、すべての反復が同じ内側マップを修正します。最終的な結果として、外部マップには同じ内部マップへの複数の参照が含まれています。あなたがループ内でマップの同じインスタンスを使用している

for (String line : this.lines) 
{ 
    HashMap<String, String> map = new HashMap<String, String>(); 
    singleData = line.split("\\|\\|"); 
    ... 
+0

ニース!私はそれがシンプルであったことを知っています –

0

:ここ

は修正版です。また、そうでなければなりません

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

HashMap<String, String> map = new HashMap<String, String>();をforループ内に宣言してください。