列表中的值覆盖了我的程序。我想使用相同的对象来添加不同的值。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
public class CommonValue {
static int key = 100;
public static void main(String[] args) throws IOException {
HashMap<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sBuffer = new StringBuffer();
Scanner scan = new Scanner(System.in);
String choice = null;
do {
System.out.println("enter the how many element to add");
int numOfElement = Integer.parseInt(reader.readLine());
String userInput;
int i = 0;
do {
// adding element in the list
System.out.println("enter the element to add in the list");
userInput = scan.next();
list.add(userInput);
i++;
} while (i < numOfElement);
// adding list in the map with key
map.put(key, list);
System.out.println(map);
list.clear();
// my intial key is 100 and it will incremented when i am going for another key
key++;
System.out.println("do you want to go for next key");
System.out.println("y or n");
choice = scan.next();
} while (choice.equals("y"));
for (Entry<Integer, ArrayList<String>> entry : map.entrySet()) {
key = entry.getKey();
ArrayList<String> value = entry.getValue();
System.out.println("key" + entry.getKey() + ": value " + entry.getValue());
}
}
}
输出:
输入要添加的元素数量 2
输入要添加到列表中的元素
一个
输入要添加到列表中的元素
X
{100 = [a,x]}
你想换下一个键吗? y或n
ÿ
输入要添加的元素数量 1
输入要添加到列表中的元素
ž
{100 = [z],101 = [z]}
你想换下一个键吗? y或n
实际上我需要的输出是:
{100 = [a,x],101 = [z]}
答案 0 :(得分:6)
问题是您不断向List
添加Map
的同一个实例,而无需复制。这不起作用,因为清除地图外的列表也会清除地图中的列表 - 毕竟,它是同一个对象。
将list.clear();
替换为list = new ArrayList<String>();
以解决此问题。
答案 1 :(得分:2)
您必须为List
中的每个条目实例化一个新的HashMap
。
目前,您要为每个条目添加完全相同的List实例。
结合list.clear()
,这会产生观察到的输出。 (唯一!)列表中的最后一个条目将定义每个键的输出。
答案 2 :(得分:2)
亲爱的你在belove line犯了错误
list.clear();
而不是仅使用新实例再次初始化列表
list = new ArrayList<String>();