Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的ArrayList正在覆盖以前的数据_Java_Arraylist - Fatal编程技术网

Java 我的ArrayList正在覆盖以前的数据

Java 我的ArrayList正在覆盖以前的数据,java,arraylist,Java,Arraylist,我试图用simpleArrayList示例来解决我的其他代码的一些问题,但是这个简单的代码给出了错误的输出 我创建了一个Hashmap的Arraylist,在该Hashmap中放入3个键/值对,然后将该Hashmap放入Arraylist,如下所示 public class SortData { public static void main (String [] args){ ArrayList<HashMap<String, String>> my

我试图用simple
ArrayList
示例来解决我的其他代码的一些问题,但是这个简单的代码给出了错误的输出

我创建了一个Hashmap的Arraylist,在该Hashmap中放入3个键/值对,然后将该Hashmap放入Arraylist,如下所示

public class SortData {

    public static void main (String [] args){

    ArrayList<HashMap<String, String>> myArrayList = new ArrayList<HashMap<String,String>>();

    HashMap<String, String> myHashMap = new HashMap<String, String>();


        myHashMap.put("title",  "first Title");
        myHashMap.put("date",   "This is date");
        myHashMap.put("number", "5");

        myArrayList.add(0, myHashMap);
为什么会覆盖
ArrayList
中以前的值? 我都试过了

myArrayList.add(Hashmap())
myArrayList.add(int-index,Hashmap())

但是输出与您添加的
ArrayList
添加对
HashMap
的引用相同,而不是副本。将相同的
HashMap
添加到
ArrayList
3次。每次添加后,您都会使用更多的
put
调用来更改内容,这些调用会由于同一个键而覆盖先前存在的值

myArrayList[ o , o , o ]
             |   |   |
             +---+   |
             |       |
             +-------+
             |
             v
             myHashMap
要添加不同的内容,请通过运行

myHashMap = new HashMap<String, String>();

ArrayList
添加对已添加的
HashMap
的引用,而不是副本。将相同的
HashMap
添加到
ArrayList
3次。每次添加后,您都会使用更多的
put
调用来更改内容,这些调用会由于同一个键而覆盖先前存在的值

myArrayList[ o , o , o ]
             |   |   |
             +---+   |
             |       |
             +-------+
             |
             v
             myHashMap
要添加不同的内容,请通过运行

myHashMap = new HashMap<String, String>();

您误解了对象引用和方法调用的工作原理。您认为自己创建了多少HashMap?(提示:查找'new'关键字)。我已经创建了一个
hashmap
,然后覆盖了中的值it@SotiriosDelimanolis,你能把我链接到任何我可以了解这些概念的文章吗?你误解了对象引用和方法调用的工作原理。你认为你已经创建了多少HashMap?(提示:查找'new'关键字)。我已经创建了一个
hashmap
,然后覆盖了中的值it@SotiriosDelimanolis,请将我链接到任何我可以了解这些概念的文章中好吗?谢谢,很抱歉问了一个愚蠢的问题,但是你说“由于相同的键,它会覆盖先前存在的值。”如果它重写了预先存在的值,为什么它没有更新?HashMap没有“更新”。例如,在第二次添加后,您有
{“title”->“second title”,“date”->“这是第二次日期”,“number”,“2”}
。在上一次
add
之后,3次
put
调用将其更改为
{“title”->“Third title”,“date”->“This This This Third date”,“number”,“7”}
。非常简单的错误,感谢这帮助了我:)谢谢,很抱歉问了一个愚蠢的问题,但你说“这会覆盖先前存在的值,因为相同的键。”如果它重写了预先存在的值,为什么它没有更新?HashMap没有“更新”。例如,在第二次添加后,您有
{“title”->“second title”,“date”->“这是第二次日期”,“number”,“2”}
。在上一次
add
之后,3次
put
调用将其更改为
{“title”->“Third title”,“date”->“This This This Third date”,“number”,“7”}
。非常简单的错误,感谢这对我的帮助:)
myArrayList[ o , o , o ]
             |   |   +-> HashMap
             |   |   
             |   +-----> HashMap
             |
             +---------> HashMap