2014-12-08 87 views
0

我有一個List<Map>這應該是下面的語法:Java列表<map>有重複的值

[{clientName=abcd}, {clientName=defg}] 

以前我有List<Bean>我想List<Map>更換。

這裏是我的代碼:

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

    clientNameMap.put("clientName","abcd"); 
    clientList.add(clientNameMap); 

    clientNameMap.put("clientName","defg"); 
    clientList.add(clientNameMap); 

與此代碼會發生什麼事是,我得到[{clientName=defg}, {clientName=defg}]爲其中,clientName=abcd由2個值defg替換輸出。我如何得到[{clientName=abcd}, {clientName=defg}]的預期結果?

謝謝

回答

3

你必須重新初始化Map<>再次增加List<>,因爲你是爲Map<>對象,並在也將改變以前的對象相同的密鑰改變先前的參考之前。

你的代碼應該是:

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

clientNameMap.put("clientName","abcd"); 
clientList.add(clientNameMap); 

clientNameMap = new HashMap<String,String>(); //Initialize it again. 
clientNameMap.put("clientName","defg"); 
clientList.add(clientNameMap); 
+0

謝謝.. :)我會加入它在一個for循環。 – user777777 2014-12-08 06:42:33

+0

重新初始化您的地圖<>創建新的地圖對象,所以我認爲,而不是重新初始化爲clientName-1,clientName-2相同的地圖添加不同的鍵。 – mady 2014-12-08 06:55:08

+0

@mady你是正確的,但用戶的要求是添加它在同一把鑰匙上。她還提到'以前我有列表,我想用列表替換'它表示鍵名對於不同的對象是相同的。 – 2014-12-08 07:01:36

1

首先閱讀地圖和列表。當您將一個Map對象(或任何其他對象)添加到List對象時,您所做的只是在列表中添加對該對象的引用。

這意味着如果您在將其添加到List對象後更改了Map內容,那麼它將反映在List中。

此外,在地圖中,關鍵必須是唯一的。

所以在這裏你需要創建一個新的Map對象,然後才能添加新的值並將新的Map對象添加到列表中。

看到這個其他職位的詳細信息:copying a java hashmap

+1

Ok..so for循環中的創建地圖和添加值到它,做這項工作對我來說..日Thnx – user777777 2014-12-08 06:38:55

1

嘗試下面的代碼,地圖的關鍵應該是唯一的,所以當你把價值相同的密鑰n次值剛剛更換爲重點,在你的代碼更換同一個鍵(clientName)的值並將其添加到列表中,以便它打印出上次映射的相同值。

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

clientNameMap.put("clientName-1","abcd"); 
clientList.add(clientNameMap); 

clientNameMap.put("clientName-2","defg"); 
clientList.add(clientNameMap);