HashMap返回未找到键的默认值?

问题

是否可以让aHashMap返回集合中未找到的所有键的默认值?


#1 热门回答(128 赞)

在Java 8中,使用Map.getOrDefault。如果没有找到匹配的密钥,它将获取密钥和返回值。


#2 热门回答(82 赞)

[更新]
如其他答案和评论者所述,从Java 8开始,你只需致电Map#getOrDefault(...)
[原创]
没有Map实现可以完全做到这一点,但通过扩展HashMap实现自己的实现是微不足道的:

public class DefaultHashMap<K,V> extends HashMap<K,V> {
  protected V defaultValue;
  public DefaultHashMap(V defaultValue) {
    this.defaultValue = defaultValue;
  }
  @Override
  public V get(Object k) {
    return containsKey(k) ? super.get(k) : defaultValue;
  }
}

#3 热门回答(65 赞)

如果你不想重新发明轮子,请使用Commons'DefaultedMap,例如,

Map<String, String> map = new DefaultedMap<>("[NO ENTRY FOUND]");
String surname = map.get("Surname"); 
// surname == "[NO ENTRY FOUND]"

如果你不首先负责创建 Map ,也可以传入现有 Map 。