当前位置: 首页 > 知识库问答 >
问题:

替换每个键包含多个值的Hashmap中的值

南门棋
2023-03-14

我需要一些帮助来替换HashMap中的值。HashMap包含每个键的多个值,这些值是从ArrayList中添加的。我想做的是替换键中的一个元素。例如,用户输入键1和索引2,这将是该键的值[1]=[A, B, C, D],索引2将是字母“C”,我想用“X”替换它,这样输出将是[1]=[A, B, X, D],这将在一个同时循环中。

 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 光盘
  • 2 张 AB 光盘
  • 3 张 AB 光盘
  • 4 张 AB 光盘
  • 5 张 AB 光盘
  • 6 张 AB 光盘
  • 7 张 AB 光盘

我尝试将所选键的所有值放入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);

     }

如果用户选择key: 1和value A,这就是结果。

    < li>[X,B,C,D] < Li >[甲、乙、丙、丁] < Li >[甲、乙、丙、丁] < Li >[甲、乙、丙、丁] < Li >[甲、乙、丙、丁] < Li >[甲、乙、丙、丁] < Li >[甲、乙、丙、丁]

但是如果用户随后选择key: 2和值B,key 1的值将成为key 2的值

    [X, X, C, D,
  • A, B, C, D]
  • [X, X, 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。我还试图在添加到HashMap之后清除ArrayList,但它会删除其值,并且不会向HashMap添加任何内容。

共有1个答案

柴意智
2023-03-14

首先,正如@earcam在评论中所说,当您使用list的同一实例时,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);
    }

要替换元素,可以使用< code>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

演示

 类似资料:
  • 问题内容: 我需要使用一个HashMaps的ArrayList调用外部API,每个ArrayList包含几个预定义的键值对。一个例子: 现在,我需要根据“值”键的内容对该结构进行排序。这种排序将导致“ key = B键/值= A值”条目作为arrayListHashMap中的第一个条目。 非常感谢您的帮助。 J 问题答案: 您需要实现一个或更一般的方法,即只提取与键关联的值,然后使用。示例代码(对

  • 我有一个数据框(我们称之为“littletext”),它有一列,每行中都有句子。我还有另一个表(我们称之为“littledict”),我想用它作为参考,以查找和替换“littletext”每行中的单词和/或短语。 这是我的两个数据帧。我在这个例子中对它们进行了硬编码,但会在“现实生活”中将它们加载为csv文件: 我希望按照下面的说明修改“littletext”,其中Python将查看“little

  • 因此,我有一个hashmap ,它存储每个字符串的arraylist。但是当我用ArrayList的新值添加另一对时,其他键值将被替换。因此,不同键的所有值都是相同的。 添加的第一个键: 对于第二个键,列表中有不同。但是,当添加第二个键(在put()方法之后)时,第一个键的值已经被替换。

  • 我通过一个接一个地放置值来创建HashMap。当我在每次迭代后打印hashmap时,生成的hashmap包含所有键的相同值。我不明白为什么会这样。我已经粘贴了下面的输出 HashMap(String,List(Object))mRestrictions; 输出:- 逐个限制:-{profile\u name=[Test1]} 逐个限制:-{profile\u name=[url],url=[url

  • 问题内容: 是否有一个内置的PHP函数用一个数组替换字符串中的多个值,该数组精确地指示要替换为什么? 例如: 结果将是:’bleh blerh bleh bleh blerh’。 问题答案: 您正在寻找。 //额外提示: 而且,如果您像示例中那样受困于一个关联数组,则可以像这样拆分它:

  • 所以我有一个练习问题,我应该用员工的信息创建一个数组,并将其传递给类;我的代码有一个问题,我似乎想不出来。 代码的目的是:将代码中看到的信息放入数组,然后传递给类中的方法,然后打印给用户。(类中的代码非常好,因此这里没有包括它)。