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

my ArrayList is overwriting previous data

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

我创建了一个 Hashmap 的 Arraylist,在那个 Hashmap 中放了 3 key/value 对,然后把那个 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);

但是当我尝试在数组列表中添加更多数据时,

import java.util.ArrayList;
import java.util.HashMap;

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


        myHashMap.put("title",  "Second Title");
        myHashMap.put("date",   "This is 2nd date");
        myHashMap.put("number", "2");

        myArrayList.add(1, myHashMap);

        myHashMap.put("title",  "Third Title");
        myHashMap.put("date",   "This is 3rd date");
        myHashMap.put("number", "7");

        myArrayList.add(2, myHashMap);


        System.out.println(myArrayList.get(0)+"");
        System.out.println(myArrayList.get(1)+"");
        System.out.println(myArrayList.get(2)+"");


    }


}

输出是,

{title=Third Title, number=7, date=This is 3rd date}
{title=Third Title, number=7, date=This is 3rd date}
{title=Third Title, number=7, date=This is 3rd date}

为什么 ArrayList 中以前的值被覆盖了? 我都试过了,

myArrayList.add(Hashmap())myArrayList.add(int index, Hashmap()) 但输出是一样的

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

myArrayList[ o , o , o ]
             |   |   |
             +---+   |
             |       |
             +-------+
             |
             v
             myHashMap

要添加不同的内容,每次添加不同的HashMaps,由运行

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

前 2 add 秒之后。

myArrayList[ o , o , o ]
             |   |   +-> HashMap
             |   |   
             |   +-----> HashMap
             |
             +---------> HashMap