【问题标题】:get string value from HashMap depending on key name根据键名从 HashMap 获取字符串值
【发布时间】:2010-12-19 20:49:31
【问题描述】:

我有一个 HashMap 有各种键和值,我怎样才能得到一个值?

我在地图中有一个名为my_code 的键,它应该包含一个字符串,我怎样才能得到它而无需遍历地图?

到目前为止,我已经得到了..

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

我希望看到 String,例如“ABC”或“DEF”,因为这是我最初输入的内容,但如果我执行 System.out.println(),我会得到类似 java.lang.string#F0454 的信息

抱歉,我对地图不太熟悉,您可能猜到了;)

【问题讨论】:

    标签: java collections hashmap


    【解决方案1】:

    只需使用Map#get(key) 吗?

    Object value = map.get(myCode);
    

    这里有一个关于地图的教程,你可能会发现它很有用:http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html

    编辑:您使用以下内容编辑了您的问题:

    我希望看到一个字符串,例如“ABC”或“DEF”,因为这是我最初放入的内容,但如果我执行 System.out.println() 我会得到类似java.lang.string#F0454

    抱歉,我对地图不太熟悉,你可能猜到了;)

    您正在看到Object#toString() 的结果。但是 java.lang.String 应该已经实现了一个,除非您创建了一个 custom 实现,其名称中带有小写的 sjava.lang.string。如果它实际上是一个自定义对象,那么每当您对所需对象执行System.out.println()toString() 时,您都需要覆盖Object#toString() 以获得“人类可读的字符串”。例如:

    @Override
    public String toString() {
        return "This is Object X with a property value " + value;
    }
    

    【讨论】:

    • 当然,如果您正在创建自定义字符串类,我建议 (1) 不要这样做,因为这可能不是您想要做的,以及 (2) 如果您打算这样做那个,不要把它放在 java.lang 命名空间中。
    • if HashMap newMap = new HashMap();如何从中获取字符串元素...?其中字符串值 = newMap.get("my_code");给出错误
    • 如何逆向?从值中获取键?
    【解决方案2】:

    恐怕你的问题根本不清楚。密钥没有“名称”;就地图而言,它没有被“称为”任何东西 - 它只是一个键,并将与其他键进行比较。如果您有很多不同类型的键,我强烈建议您将它们放在不同的地图中以保持理智。

    如果这没有帮助,请澄清问题 - 最好用一些代码来说明你的意思。

    【讨论】:

      【解决方案3】:

      map.get(myCode)

      【讨论】:

        【解决方案4】:

        您可以使用 HashMap 中的 get(Object key) 方法。 请注意,在许多情况下,您的 Key Class 应该覆盖 equals 方法,以成为 Map 键的有用类。

        【讨论】:

          【解决方案5】:

          如果您将键/值存储为字符串,那么这将起作用:

          HashMap<String, String> newMap = new HashMap<String, String>();
          newMap.put("my_code", "shhh_secret");
          String value = newMap.get("my_code");
          

          问题是 HashMap 中填充了什么(键和值)

          【讨论】:

          • if HashMap newMap = new HashMap();如何从中获取字符串元素...?其中字符串值 = newMap.get("my_code");给出错误
          • 这两个"my_code" 字符串不是有不同的引用吗?为什么会这样?
          【解决方案6】:

          如果您将使用泛型并将您的地图定义为

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

          然后获取值作为

           String s = map.get("keyStr"); 
          

          您不需要对 map.get() 进行类型转换或调用 toString 方法来获取字符串值

          【讨论】:

            【解决方案7】:

            这里要注意的重要一点是,如果您的键是 java 中用户定义类的对象,那么请务必覆盖 equals 方法。因为 HashMap.get(Object key) 方法使用 equals 方法来匹配键值。如果你不覆盖 equals 方法,那么它会尝试仅根据键的引用而不是键的实际值来查找值,在这种情况下,它将始终返回 null。

            【讨论】:

              【解决方案8】:

              假设您将 HashMap 声明为:-

              HashMap<Character,Integer> hs = new HashMap<>();
              

              那么,map中的key是Character数据类型,value是int类型。现在,无论key是什么类型,value类型都可以获取key对应的value,语法是:-

                  char temp = 'a';
                  if(hs.containsKey(temp)){
              `       int val = hs.get(temp); //val is the value corresponding to key temp
                  }
              

              所以,根据你的问题,你想得到一个键对应的字符串值。为此,只需将 HashMap 声明为 HashMap(); 使用它将使您的代码更清晰,而且您不必将 hs.get("my_code") 的结果转换为字符串,因为默认情况下,如果在输入时将值保留为字符串,则它会返回字符串的值。

              【讨论】:

                【解决方案9】:
                 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
                 hmap.put(4, "DD");
                

                映射到键4的值是DD

                【讨论】:

                  【解决方案10】:

                  这是另一个如何使用 keySet()、get()、values() 和 entrySet() 函数在 Map 中获取 Keys 和 Values 的示例:

                          Map<Integer, String> testKeyset = new HashMap<Integer, String>();
                  
                          testKeyset.put(1, "first");
                          testKeyset.put(2, "second");
                          testKeyset.put(3, "third");
                          testKeyset.put(4, "fourth");
                  
                          // Print a single value relevant to a specified Key. (uses keySet())
                          for(int mapKey: testKeyset.keySet())
                              System.out.println(testKeyset.get(mapKey));
                  
                          // Print all values regardless of the key.
                          for(String mapVal: testKeyset.values())
                              System.out.println(mapVal.trim());
                  
                          // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
                          System.out.println(testKeyset.entrySet());
                  

                  【讨论】:

                    猜你喜欢
                    • 2018-10-29
                    • 2013-09-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多