HashMap.get()在一个代码段中起作用,而在另一个代码段中不起作用,为什么?

时间:2020-07-01 02:34:42

标签: java string hashmap char

我有一个类似于下面的哈希图,

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    
}};

我正试图从上面的地图中获取与“ 2 *”相对应的值,

方法1

String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(ch[0]+ch[1], 0);   //returns 0

方法2

String string = "2*";
char[] ch = string.toCharArray();
map.getOrDefault(String.valueOf(ch[0])+String.valueOf(ch[1]), 0);  //returns 6

第一个代码段始终返回“ 0”,而第二个代码段可以返回正确的值。我不明白有人可以启发我吗?

2 个答案:

答案 0 :(得分:3)

在以下情况下。

batches ==[]

您要添加String string = "2*"; char[] ch = string.toCharArray(); map.getOrDefault(ch[0]+ch[1], 0); + ch[0]。字符加为整数,这就是你 试图得到。 ch[1]2的整数和。

您可以通过执行以下操作将总和转换为字符连接:

*

答案 1 :(得分:1)

原因是因为从char数组获取的值仍被视为int值,因此,您正在搜索映射中没有这些char值。在第二个示例中,您将明确告诉地图获取这些字符的字符串表示形式,这些字符位于地图中。

相关问题