我需要一些帮助来替换HashMap中的值。 HashMap包含每个键的多个值,这些值是从ArrayList添加的。我想要做的是替换密钥中的元素。例如,用户输入键1和索引2,这将是该键的值[1] = [A,B,C,D],索引2将是字母" C"我想用一个" X"因此输出将是[1] = [A,B,X,D],这将在while循环内。
HashMap<String, List<String>> seatMap = new HashMap<String, List<String>>();
seats.add("A");
seats.add("B");
seats.add("C");
seats.add("D");
String k = null;
for(int i=1; i<8;i++){
k = Integer.toString(i);
seatMap.put(k, seats);
}
for(Map.Entry<String, List<String>> entry : seatMap.entrySet()){
String key= entry.getKey();
List<String> values = entry.getValue();
System.out.println(key+" "+values.get(0)+values.get(1)+" "+values.get(2)+values.get(3));
}
输出:
我试图将所选键中的所有值放入ArrayList中,然后替换ArrayList中的值,然后将ArrayList放入选定的键中,它应该替换键的值。
ArrayList temp = new ArrayList();
temp.addAll(seatMap.get(row));
temp.set(inputKey, "X");
seatMap.put(row, temp);
for(Map.Entry<String, List<String>> entry : seatMap.entrySet()){
String key= entry.getKey();
List<String> values = entry.getValue();
System.out.println(values);
}
如果用户选择键:1和值A,则结果为。
但是如果用户然后选择键:2和值B,则键1的值变为键2的值
我想要一个像这样的输出
它会根据用户选择的内容放置和X. 我已经尝试在添加到HashMap之后清除ArrayList,但它删除了它的值并且它不会向HashMap添加任何内容。
答案 0 :(得分:3)
首先,正如@earcam在评论中所说,当您使用seatMap
的相同实例时,list
中的所有值都会被共享。如果在一个列表中替换字符串,它将替换所有列表。
所以,在for循环中移动List<String> seatMap ...
for(int i=1; i<8;i++){
List<String> seats = new ArrayList<String>();
seats.add("A");
seats.add("B");
seats.add("C");
seats.add("D");
k = Integer.toString(i);
seatMap.put(k, seats);
}
要替换元素,您可以使用set
。来自关于集合的文档,
使用指定的元素替换此列表中指定位置的元素。
int key = 1, index = 2;
seatMap.get(Integer.toString(key)).set(2, "X");
为了示例,我是硬编码,密钥和索引。您可以根据自己的要求调整代码。
输出
1 AB XD
2 AB CD
3 AB CD
4 AB CD
5 AB CD
6 AB CD
7 AB CD