我的 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
要添加不同的内容,每次添加不同的HashMap
s,由运行
myHashMap = new HashMap<String, String>();
前 2 add
秒之后。
myArrayList[ o , o , o ]
| | +-> HashMap
| |
| +-----> HashMap
|
+---------> HashMap
我正在尝试使用简单的 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
要添加不同的内容,每次添加不同的HashMap
s,由运行
myHashMap = new HashMap<String, String>();
前 2 add
秒之后。
myArrayList[ o , o , o ]
| | +-> HashMap
| |
| +-----> HashMap
|
+---------> HashMap