我需要一些帮助替换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));
}
输出:
1张AB CD
2 AB CD
3 AB CD
4 AB CD
5 AB CD
6 AB CD
7 AB CD
我试图将所有来自选定键的值放入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,这就是结果。
[X,B,C,D]
[A B C D]
[A B C D]
[A B C D]
[A B C D]
[A B C D]
[A B C D]
但是,如果用户随后选择键:2和值B,则键1的值将成为键2的值
[X,X,C,D,A,B,C,D]
[X,X,C,D,A,B,C,D]
[A B C D]
[A B C D]
[A B C D]
[A B C D]
[A B C D]
我想要这样的输出
[X,B,C,X]
[A,X,C,D]
[A B C D]
[A,B,X,X]
[A,X,C,D]
[A B C D]
[A,B,C,X]
它会根据用户的选择放置X。
我还尝试过将ArrayList添加到HashMap后清除,但是它删除了它的值,并且没有向HashMap添加任何内容。
最佳答案
首先,正如@earcam在评论中所说,seatMap
中的所有值都是共享的,因为您使用的是list
的相同实例。如果在一个列表中替换字符串,它将在所有列表中替换。
因此,将List<String> seatMap ...
移动到for循环内
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
Demo
关于java - 替换Hashmap中每个键包含多个值的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33269349/