根据键名从 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 实现,其名称中带有小写的 s
:java.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恐怕你的问题根本不清楚。密钥没有“名称”;就地图而言,它没有被“称为”任何东西 - 它只是一个键,并将与其他键进行比较。如果您有很多不同类型的键,我强烈建议您将它们放在不同的地图中以保持理智。
如果这没有帮助,请澄清问题 - 最好用一些代码来说明你的意思。
【讨论】:
【参考方案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"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 获取字符串值的主要内容,如果未能解决你的问题,请参考以下文章