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

Jim*_*mmy 120 java collections hashmap

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

我在地图中有一个键my_code,它应该包含一个字符串,我怎么能在不必迭代地图的情况下得到它?

到目前为止我已经......

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();
Run Code Online (Sandbox Code Playgroud)

我期待看到一个String,如"ABC"或"DEF",因为这是我最初放在那里,但如果我做了一个System.out.println()我得到像java.lang.string#F0454

对不起,我不太熟悉你可能猜到的地图;)

Bal*_*usC 163

刚用Map#get(key)

Object value = map.get(myCode);
Run Code Online (Sandbox Code Playgroud)

这是一个关于地图的教程,您可能会发现它很有用: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应该已经实现了一个,除非你在名称中创建了一个小写的自定义实现s:java.lang.string.如果它实际上是一个自定义对象,那么Object#toString()每当你执行一个System.out.println()toString()所需的对象时,你需要覆盖以获得一个"人类可读的字符串" .例如:

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

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

jef*_*ter 57

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

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");
Run Code Online (Sandbox Code Playgroud)

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


Shi*_*ari 11

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

Map<String,String> map = new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)

然后取值为

 String s = map.get("keyStr"); 
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*eet 9

我担心你的问题根本不清楚.钥匙没有"名字"; 就地图而言,它不会被"召唤"任何东西 - 它只是一个键,并将与其他键进行比较.如果你有很多不同种类的钥匙,我强烈建议你把它们放在不同的地图上以保持理智.

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


aby*_*byx 6

map.get(myCode)


小智 6

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