【问题标题】:How to retrieve all the values associated with a key?如何检索与键关联的所有值?
【发布时间】:2009-02-12 13:46:00
【问题描述】:

我想获取与 Map 中的键关联的所有值。 例如,

Map tempMap = new HashMap();
tempMap.put("1","X");
tempMap.put("2","Y");
tempMap.put("3","Z");
tempMap.put("1","ABC");
tempMap.put("2","RR");
tempMap.put("1","RT");

如何检索与键 1 关联的所有值?

【问题讨论】:

    标签: java map


    【解决方案1】:

    您必须了解的是,在 Map 中,键是唯一的。

    这意味着之后

    tempMap.put("1","X");
    

    “1”映射到“X”

    之后

    tempMap.put("1","ABC");
    

    “1”映射到“ABC”,之前的值(“X”)丢失了

    【讨论】:

    • @Anand:如果您需要将同一个键映射到多个字符串,请使用 Collection 作为值。即,像这样定义您的地图: Map> tempMap.
    【解决方案2】:

    来自 HashMap javadoc:

    public V put(K key, V value)
    

    将指定值与此映射中的指定键相关联。如果映射先前包含键的映射,则旧值被替换

    【讨论】:

      【解决方案3】:

      你可以这样做:

      Map<String, List<String>> tempMap = new HashMap<String, List<String>>();
      tempMap.put("1", new LinkedList<String>());
      tempMap.get("1").add("X");
      tempMap.get("1").add("Y");
      tempMap.get("1").add("Z");
      
      for(String value : tempMap.get("1")) {
        //do something
      }
      

      这会将对应于键“1”的值划分到它们自己的列表中,您可以轻松访问这些值。只是不要忘记初始化列表...否则NullPointerExceptions 会来接你。

      尤瓦尔=8-)

      【讨论】:

        【解决方案4】:

        不能

        尝试使用google collections的Multimap

        【讨论】:

          【解决方案5】:

          我认为你遗漏了一些重要的东西:

          Map tempMap = new HashMap();
          tempMap.put("1","X");
          tempMap.put("2","Y");
          tempMap.put("3","Z");
          tempMap.put("1","ABC"); // replaces "X"
          tempMap.put("2","RR"); // replaces "Y"
          tempMap.put("1","RT"); // replaces "ABC"
          

          此外,您应该尽可能使用泛型,因此您的第一行应该是:

          Map<String, String> tempMap = new HashMap<String, String>();
          

          【讨论】:

            【解决方案6】:

            为此,您必须将每个键与一组值相关联,并使用相应的逻辑来创建该组并从中输入/删除值,而不是 Map 上的简单 put() 和 get()。

            或者您可以使用现成的 Multimap 实现之一,例如 one in Apache commons

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-29
              • 2013-03-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多