Java:对HashMap的键使用通配符(*)
我想做的是创建一个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.
*
可以用作键,因此如果搜索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的类中。非常感谢你。我觉得我从中学到了很多东西。