Java列表
我有一个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}]
的预期结果?
谢谢
你必须重新初始化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);
首先阅读地图和列表。当您将一个Map对象(或任何其他对象)添加到List对象时,您所做的只是在列表中添加对该对象的引用。
这意味着如果您在将其添加到List对象后更改了Map内容,那么它将反映在List中。
此外,在地图中,关键必须是唯一的。
所以在这里你需要创建一个新的Map对象,然后才能添加新的值并将新的Map对象添加到列表中。
看到这个其他职位的详细信息:copying a java hashmap
Ok..so for循环中的创建地图和添加值到它,做这项工作对我来说..日Thnx – user777777 2014-12-08 06:38:55
尝试下面的代码,地图的关键应该是唯一的,所以当你把价值相同的密钥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);
谢谢.. :)我会加入它在一个for循环。 – user777777 2014-12-08 06:42:33
重新初始化您的地图创建新的地图对象,所以我认为,而不是重新初始化为clientName-1,clientName-2相同的地图添加不同的键。 – mady 2014-12-08 06:55:08
@mady你是正确的,但用户的要求是添加它在同一把钥匙上。她还提到'以前我有列表,我想用列表