Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:对HashMap的键使用通配符(*)_Java_Hashmap - Fatal编程技术网

Java:对HashMap的键使用通配符(*)

Java:对HashMap的键使用通配符(*),java,hashmap,Java,Hashmap,我想做的是创建一个HashMap,如下所示 我假设通配符*可以用作键,因此如果搜索a、b和c(比如x)以外的任何字符,此哈希映射将返回10 for (int j = 0; j <= 2; j++) { table.put(pattern[j], (pattern.length - 1 - j)); //This part is actually not the same as the original code.

我想做的是创建一个HashMap,如下所示

我假设通配符
*
可以用作键,因此如果搜索
a
b
c
(比如
x
)以外的任何字符,此哈希映射将返回
10

 for (int j = 0; j <= 2; j++) {            
        table.put(pattern[j], (pattern.length - 1 - j)); 
        //This part is actually not the same as the original code.
        //The keys are a,b,c, and the values are 1,2,3 respectively     
    }
    table.put('*', 10);

for(int j=0;j最好单独处理它,而不是创建一个新的Map类。
您可以使用一些包装器类执行以下操作:

public Object getWithDefault(key){
    if (hashMap.get(key) == null){
        return hashMap.get("*");
    }
}
然后用包装器类调用它

wrapper.getWithDefault('d');  // returns 10.

Java 1.8支持getOrDefault


因此,您可以使用map.getOrDefault(key,defaultValue)

子类
HashMap
使其执行您想要的操作,即,给定一个未显式映射的值,返回
10
*
字符在HashMaps中并不特殊。HashMaps仅对hashCode及其键的相等性进行操作——没有其他魔法(除了
null
,我想这是一种特殊情况,它只与自身相等。)
*
没有理由像通配符一样工作,比如说,
w
充当通配符。@SotiriosDelimanolis但这会破坏
Map
@PaulBoddington Nah的合同,请澄清这个新类规范中的行为。谢谢你的建议,但显然没有一个方法可以设置默认值,是吗?我正在阅读这个()如果没有这样的方法,我会重写
getOrdefault(key,defaultValue)
,这样我就可以设置默认值。你怎么看这个想法?你可以这么做。但是更好的设计,正如我所想,是将默认值作为属性放在使用Map的类中。非常感谢你。我觉得我从中学到了很多东西。