2014-10-03 15 views
0

我正在將String密鑰和String值添加到hashmap1。反過來,我還必須將hashmap1添加到另一個hashmap2,作爲其關鍵字爲String的值。Hashmap未顯示以前添加的字符串

不知何故,hashmap1覆蓋了所有最後添加的鍵的值。我如何解決這個問題以得到hashmap1,其中包含我添加的所有值對。 是一個ArrayList,其中包含我將添加到hashmap1的值。

al.add("def"); 
    al.add("xyz"); 
    al.add("pqr"); 
    al.add("mno"); 
    for(int i=0; i<al.size();i++){ 
     map.put("positionTitle", al.get(i).toString()); 
     System.out.println(map.get("positionTitle")); 
     positionTitles.put(String.valueOf(i), map); 
     System.out.println("Value in the position title while in the loop "+positionTitles.get(String.valueOf(i)).get("positionTitle")); 
    } 

    for(String s: positionTitles.keySet()){ 
     System.out.println("key in the position title:" +s); 
     for(String a: positionTitles.get(s).keySet()){ 
     System.out.println("Keys in the map in the position title "+a); 
     System.out.println("Values in the map in position title "+positionTitles.get(s).get(a)); 
     } 
    } 

輸出:

[ABC,DEF,XYZ,PQR,MNO]

ABC

值中的位置的標題,而在循環ABC

DEF

位置titl中的值È而在位置標題環路DEF

XYZ

值,而在迴路中的xyz

PQR

值中的位置的標題,而在循環PQR

MNO

在循環中的位置標題中的值mno

鍵在位置標題:0

密鑰中的位置標題地圖POSITIONTITLE

值在位置標題MNO地圖

在位置的標題密鑰:1

密鑰在地圖上的位置標題位置標題

位置標題mno中的地圖值

鍵的位置名稱:2個

密鑰中的位置標題地圖POSITIONTITLE

值在位置標題MNO地圖

在位置的標題密鑰:3

鍵在在標題位置在地圖POSITIONTITLE

價值觀的位置標題MNO地圖

在斷定關鍵離子標題:4個

密鑰中的位置標題地圖POSITIONTITLE

值在位置標題地圖MNO

+2

這很不清楚?你想達到什麼目的? – Alboz 2014-10-03 22:43:01

+0

您總是在「positionTitle」(鍵)中輸入您在al上迭代的值,因此當第一個for循環結束時,它只保存最後一項的值,即「al」,它是mno。這就是它用最後一個值覆蓋的原因。如果您不更改密鑰,它將始終將值保存在同一個密鑰中(map.put(「positionTitle」,al.get(i).toString())始終將al.get(i)保存在「 positionTitle「鍵) – monica 2014-10-03 22:48:45

回答

0

問題是,「地圖」變量被重新使用。

map.put("positionTitle", al.get(i).toString()); 
positionTitles.put(String.valueOf(i), map); 

長方砌石在同一散列映射每次相同的密鑰的新值,並存儲在所述第二地圖不同的密鑰相同的對象。因此基本上覆蓋了你在每個循環之前做過的事情。 要解決你的問題,你需要爲每個循環創建一個新的hashmap對象或使用不同的鍵。 既然你說說嵌套包含HashMap我猜你想要做的是:

map = new HashMap(); 
map.put("positionTitle", al.get(i).toString()); 
positionTitles.put(String.valueOf(i), map); 

爲什麼要做到這一點,但好運氣什麼辦法,我不understan

相關問題