如果已经存在,如何防止 hashmap 或 treemap 替换先前的键值?另外,我想抛出异常以通知用户。
问问题
5335 次
5 回答
11
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
}
于 2013-09-07T08:14:19.033 回答
7
使用 myMap.putIfAbsent(key, val)
从 1.8 开始,这已在 Map 界面中引入
* @since 1.8
*/
default V putIfAbsent(K key, V value) {
于 2016-12-14T22:21:11.737 回答
3
为什么不直接包装你的地图?组合优于继承。
void put(Object key, Object value){
if(map.containsKey(key)){
throw Exception("Custom exception");
}else{
map.put(key,value);
}
}
于 2013-09-07T08:16:04.667 回答
2
您可以使用Map#containsKey(object)方法检查密钥是否已经存在,然后再将其添加到Map
于 2013-09-07T08:17:17.153 回答
0
不,默认情况下你不能,因为它似乎对你有特定的要求。
所以创建你自己的类来扩展HashMap
/任何实现和 ovveride 插入方法。
如果 key 与return
来自 there/ throw
some的现有 key 匹配exception
。
于 2013-09-07T08:14:36.947 回答