根据键名从 HashMap 获取字符串值

Posted

技术标签:

【中文标题】根据键名从 HashMap 获取字符串值【英文标题】:get string value from HashMap depending on key name 【发布时间】: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 的信息

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

【问题讨论】:

【参考方案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());

【讨论】:

以上是关于根据键名从 HashMap 获取字符串值的主要内容,如果未能解决你的问题,请参考以下文章

php 程序:对数组按键名从大到小排列要用啥函数 ,要保持原键名不变

JavaScript Hashmap散列算法

JavaScript Hashmap散列算法

数组排序

php数组排序

根据 JSTL 的键从 hashmap 中获取值