我需要一些帮助替换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/

10-12 00:33
查看更多