Java 为什么clear hashmap方法会清除数组列表中添加的映射
我正在尝试重用相同的HashMap,如下面的示例中所示,以填充列表。首先,我在地图中放置一些值,将地图添加到列表中,然后清除地图,以便再次放置新值,并在列表中添加第二组值,依此类推 但是,clear()方法似乎也会删除以前添加到列表中的值,如果我不使用clear()方法,以前添加到列表中的每个值集都会被新的值集覆盖,因此在这个特定的示例中,我将在列表中有4个相同的值集 我做错了什么Java 为什么clear hashmap方法会清除数组列表中添加的映射,java,hashmap,Java,Hashmap,我正在尝试重用相同的HashMap,如下面的示例中所示,以填充列表。首先,我在地图中放置一些值,将地图添加到列表中,然后清除地图,以便再次放置新值,并在列表中添加第二组值,依此类推 但是,clear()方法似乎也会删除以前添加到列表中的值,如果我不使用clear()方法,以前添加到列表中的每个值集都会被新的值集覆盖,因此在这个特定的示例中,我将在列表中有4个相同的值集 我做错了什么 List<HashMap<String, String>>dataList = n
List<HashMap<String, String>>dataList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put(Answer.ID, "0");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, firstOption);
dataList.add(map);
map.clear();
map.put(Answer.ID, "1");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, secondOption);
dataList.add(map);
map.clear();
map.put(Answer.ID, "2");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, thirdOption);
dataList.add(map);
map.clear();
map.put(Answer.ID, "3");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, fourthOption);
dataList.add(map);
map.clear();
ListdataList=newarraylist();
HashMap=newHashMap();
地图放置(答案ID为“0”);
map.put(Answer.IMAGE,“color_icon_awesome”);
map.put(Answer.TITLE,firstOption);
添加(地图);
map.clear();
地图放置(答案ID,“1”);
map.put(Answer.IMAGE,“color_icon_awesome”);
map.put(Answer.TITLE,secondOption);
添加(地图);
map.clear();
地图放置(答案ID,“2”);
map.put(Answer.IMAGE,“color_icon_awesome”);
地图放置(答案、标题、第三部分);
添加(地图);
map.clear();
地图放置(答案ID,“3”);
map.put(Answer.IMAGE,“color_icon_awesome”);
地图。放置(答案。标题,四选项);
添加(地图);
map.clear();
dataList.add(map)
将在列表中放置对map
的引用,因此它不是副本。然后执行map.clear()
操作时,它也会删除列表中映射的内容,因为它是同一个对象。改为执行dataList.add(map.clone())
,或者(最好)执行map=newhashmap()代码>之后
map.put(Answer.ID, "0");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, firstOption);
dataList.add(map);
map = new HashMap<>();
这将使您的代码更漂亮、更可读
List<AnswerObject> dataList = new ArrayList<>();
dataList.add(new AnswerObject("0", "color_icon_awesome", firstOption));
dataList.add(new AnswerObject("1", "color_icon_awesome", secondOption));
dataList.add(new AnswerObject("2", "color_icon_awesome", thirdOption));
dataList.add(new AnswerObject("3", "color_icon_awesome", fourthOption));
List dataList=new ArrayList();
添加(新的AnswerObject(“0”,“颜色图标”,第一选项));
添加(新的AnswerObject(“1”,“颜色图标”,第二个选项));
添加(新的AnswerObject(“2”,“彩色图标”,第三个选项));
添加(新的AnswerObject(“3”,“颜色”图标“很棒”,四个选项));
但请忽略这一点;-) 您正在将同一地图添加到列表中。您正在尝试获取来自地图或地图列表的字符串列表吗?如果您试图创建一个地图列表,那么每次都需要创建一个新地图。将地图放入列表并修改地图内容后,您将修改添加到列表中的同一地图。只需在add方法中更改代码,而不是dataList.add(map)
dodataList.add(新HashMap(map))代码>这将解决您的问题您似乎正在创建单条目映射列表。这是一个非常不寻常的数据结构。你到底想干什么?也许有一种更合适(也更易于使用)的数据结构可以替代。您还应该考虑使用EnumMap
使用对象的好主意。我确实有,但在所有的匆忙中,我只是遵循了一个老的例子,谢谢!
List<AnswerObject> dataList = new ArrayList<>();
dataList.add(new AnswerObject("0", "color_icon_awesome", firstOption));
dataList.add(new AnswerObject("1", "color_icon_awesome", secondOption));
dataList.add(new AnswerObject("2", "color_icon_awesome", thirdOption));
dataList.add(new AnswerObject("3", "color_icon_awesome", fourthOption));