为什么清除hashmap方法会清除数组列表中添加的映射

Munez NS

我试图像下面的示例中一样重复使用相同的HashMap来填充列表。首先,我在地图中添加了一些值,将地图添加到列表中,然后清除地图以再次添加新值,并在列表中添加第二组值,依此类推...

但是,似乎clear()方法也会删除先前添加在列表中的值,如果我不使用clear()方法,则先前添加在列表中的每组值都会被新的一组值覆盖,从而最终这个特定的例子,我将在列表中有4个相同的值集。

我做错了什么?

    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();
马丁·S

dataList.add(map)会将引用添加到map列表中,因此它不是副本。然后再执行此操作时map.clear(),它也会删除列表中地图的内容,因为它是同一对象。不要dataList.add(map.clone())代替或(最好)做map = new HashMap<>();之后。

map.put(Answer.ID, "0");
map.put(Answer.IMAGE, "color_icon_awesome");
map.put(Answer.TITLE, firstOption);
dataList.add(map);
map = new HashMap<>();

旁注:您的代码看起来可以使用对象而不是地图:

class AnswerObject {

  private String id;
  private String image;
  private String title;

  public AnswerObject(String id, String image, String title) {
      this.id = id;
      this.image = image;
      this.title = title;
  }

  // some getters and setters and some other usefull code

}

这应该使您的代码更美观,更易读

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));

但是请随意忽略它;-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中清除数组

来自分类Dev

清除数组

来自分类Dev

清除数组中的超时(如果存在)

来自分类Dev

Swift:在迭代函数中清除数组

来自分类Dev

清除数组中的空元素

来自分类Dev

Android:如何在不从数组列表中删除数据的情况下清除列表视图?

来自分类Dev

为什么我的方法会覆盖数组中的位置

来自分类Dev

为什么清除不清除?

来自分类Dev

为什么单击提交按钮后不能清除数据?

来自分类Dev

C#中清除数组部分或四处移动部分的最快方法

来自分类Dev

如何清除数组中字符串中的字符?

来自分类Dev

为什么 .push() 方法会重复添加到数组中的最后一个元素的值?

来自分类Dev

在React受控组件中清除数据列表输入onClick

来自分类Dev

从列表数组中清除图片框

来自分类Dev

敲除映射:为什么应用绑定清除嵌套对象中的值?

来自分类Dev

在熊猫中管理数据清除数据的最佳方法

来自分类Dev

为什么该方法删除数组中的元素?

来自分类Dev

为什么“清除”不清除整个屏幕?

来自分类Dev

用Javascript性能清除数组

来自分类Dev

使用C#后清除数组

来自分类Dev

清除数组中行的内容 - If with loop

来自分类Dev

为什么Spark Streaming中的多个print()方法会影响列表中的值?

来自分类Dev

为什么Spark Streaming中的多个print()方法会影响列表中的值?

来自分类Dev

清除Polymer中的数组?

来自分类Dev

为什么我不能清除ArrayList的两个子列表

来自分类Dev

为什么数组保存最后的数据却不清除?

来自分类Dev

为什么数组保存最后的数据却不清除?

来自分类Dev

为什么Java取消移位方法会添加引号?

来自分类Dev

为什么我的方法会继续超过数组的长度?

Related 相关文章

热门标签

归档