如果已经存在,我怎么能阻止hashmap或treemap替换以前的键值呢?另外,我想抛出异常来通知用户。
答案 0 :(得分:10)
说实话,任何此类地图都会违反正常的Map
界面。但是如果您愿意这样做,您可以轻松地创建自己的Map
实现,该实现委托给另一个地图,但只有在检查现有元素的存在之后:
public final class NonReplacementMap<K, V> implements Map<K, V> {
private final Map<K, V> original;
public NonReplacementMap(Map<K, V> original) {
this.original = original;
}
@Override
public void put(K key, V value) {
if (original.containsKey(key)) {
// Or whatever unchecked exception you want
throw new IllegalStateException("Key already in map");
}
original.put(key, value);
}
// etc
}
答案 1 :(得分:3)
为什么不包装你的地图? Composition over inheritance
void put(Object key, Object value){
if(map.containsKey(key)){
throw Exception("Custom exception");
}else{
map.put(key,value);
}
}
答案 2 :(得分:3)
使用myMap.putIfAbsent(key,val)
这是自1.8以来在Map接口中引入的
click
答案 3 :(得分:2)
您可以使用Map#containsKey(object)方法检查密钥是否已经存在,然后再将其添加到Map
答案 4 :(得分:0)
不,默认情况下你不能,因为它似乎对你有特殊要求。
因此,创建自己的类,扩展HashMap
/任何实现和ovveride插入方法。
如果密钥与现有的return
匹配/ throw
某些exception
。