[英]HashMap.get() works in one snippet and does not work on another one why?
我有一個 hashmap 如下所示,
static Map<String, Integer> map = new HashMap<String, Integer>() {
{
put("**", 15); //11 to 19 and 21 to 26
put("*0", 2); // 1 and 2
put("*1", 2);
put("*2", 2);
put("*3", 2);
put("*4", 2);
put("*5", 2);
put("*6", 2);
put("*7", 1); //1
put("*8", 1);
put("*9", 1);
put("1*", 9); //1 to 9
put("2*", 6); //1 to 6
}};
我正在嘗試從 map 上方獲取與“2 *”對應的值,例如,
方法一
String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(ch[0]+ch[1], 0); //returns 0
方法二
String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(String.valueOf(ch[0])+String.valueOf(ch[1]), 0); //returns 6
第一個片段總是返回“0”,而第二個片段可以返回正確的值。 我不明白怎么做。 有人可以啟發我嗎?
在以下情況下。
String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(ch[0]+ch[1], 0);
您正在添加ch[0]
+ ch[1]
。 字符添加為整數,這就是你想要得到的。 integer 和2
和*
。
您可以通過執行以下操作將總和轉換為字符連接:
System.out.println(map.getOrDefault(""+ch[0]+ch[1], 0));
原因是您從 char 數組中獲取的值仍被視為 int 值,因此,您正在 map 中搜索那些沒有的 char 值。 在第二個示例中,您明確告訴您的 map 獲取這些字符的字符串表示形式,這些字符位於您的 map 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.