从HashMap获取字符串值,具体取决于键名


123

我有一个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

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

Answers:


166

只是使用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除非您创建了名称为小写的自定义实现,否则应当已经实现了。如果它实际上是一个自定义对象,则无论何时对所需对象执行或,都需要重写以获取“人类可读的字符串” 。例如:sjava.lang.stringObject#toString()System.out.println()toString()

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

1
当然,如果要创建自定义字符串类,我建议(1)不要这样做,因为它可能不是您想要的,(2)如果要这样做,请不要将其放在java.lang命名空间。
MatrixFrog 2010年

1
如果HashMap <String,String> newMap = new HashMap <String,String>(); 如何从中获取字符串元素...?其中String值= newMap.get(“ my_code”); 给出错误
saidesh kilaru 2013年

你怎么能逆?从价值中获取钥匙?
2015年

58

如果将键/值存储为字符串,则可以使用:

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

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


如果HashMap <String,String> newMap = new HashMap <String,String>(); 如何从中获取字符串元素...?其中String值= newMap.get(“ my_code”); 给出错误
saidesh kilaru

11

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

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

然后获取价值为

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

您将不需要强制转换map.get()或调用toString方法来获取String值


9

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

如果这样做没有帮助,请澄清问题-最好添加一些代码来显示您的意思。



6

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


gr8解释
妈妈

3

假设您将HashMap声明为:-

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

然后,映射中的键的类型为字符数据类型,而值的类型为int类型。现在,无论键的类型,值类型如何,要获取与键对应的值,语法为:

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

因此,根据您的问题,您想要获取与键相对应的字符串值。为此,只需将HashMap声明为HashMap <“ key的数据类型”,“ value的数据类型” hs = new HashMap <>();。使用它可以使代码更整洁,也不必将hs.get(“ my_code”)的结果转换为字符串,因为默认情况下,如果在输入时将值保留为字符串,则它将返回字符串的值。


1

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

        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());

0

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.