Java 重复插入时的映射抛出错误
我正在创建一个包含一些数据的映射,如果试图插入重复值,我希望映射引发异常Java 重复插入时的映射抛出错误,java,dictionary,Java,Dictionary,我正在创建一个包含一些数据的映射,如果试图插入重复值,我希望映射引发异常 Map <Integer, String> temp; temp.put(1, "hi"); temp.put(1, "hello"); Map温度; 温度输入(1,“高”); 临时放置(1,“你好”); 由于键“1”已存在,因此此映射应引发错误。 它可能抛出错误或不编译。 是否有任何地图显示了上述功能 Map.put返回与键关联的上一个值,如果存在,则返回null 没有键的映射。(null返回也可以表示映
Map <Integer, String> temp;
temp.put(1, "hi");
temp.put(1, "hello");
Map温度;
温度输入(1,“高”);
临时放置(1,“你好”);
由于键“1”已存在,因此此映射应引发错误。
它可能抛出错误或不编译。
是否有任何地图显示了上述功能
Map.put返回与键关联的上一个值,如果存在,则返回null
没有键的映射。(null返回也可以表示映射
如果实现支持,则以前将null与键关联
空值。)
所以你可以这样做:
public void addItem ( Integer key, String value ) throws Exception {
String old = map.put( key, value );
if ( old != null) {
throw new Exception("Already exists!");
}
}
注意:在这段代码中,无论如何都会插入新值,即使键已经存在,也不能添加null,因为它会引发异常。Map在尝试使用映射中存在的键添加新值时不会引发任何错误或异常。在这种情况下,旧值只是被新值替换 如果您想添加在这种情况下会引发错误的功能,可以使用
if(map.containsKey(yourKey)) // here your error action
检查containsKey方法
Map<Integer, String> map = new LinkedHashMap<>();
map.put(1, "Value");
if (map.containsKey(1)) {
throw new Exception("Map already contains key 1");
}
然后使用它:
public static void main(String[] args) throws Exception {
Map<Integer, String> map = new MyCustomMap();
map.put(1, "Value");
map.put(1, "Another value");
}
publicstaticvoidmain(字符串[]args)引发异常{
Map Map=新的MyCustomMap();
地图放置(1,“值”);
map.put(1,“另一个值”);
}
注意:这是一个示例,没有空检查等
但是,请在询问之前,始终尝试检查JavaDoc或基本数据结构用例,我相信Google上有大量的示例;)在put操作之前使用包含检查不是原子操作,因此不是线程安全的。此外,每次添加条目时,必须访问地图两次 要避免这种情况,请使用诸如merge或compute之类的函数方法之一:
map.merge(key, value, (v1, v2) -> {
throw new IllegalArgumentException("Duplicate key '" + key + "'.");
});
上面的代码将始终抛出NullPointerException,因为您甚至没有初始化临时映射。重复与否。映射不需要有这样的功能,因为您可以随时调用
if(temp.containsKey(1))
以避免出现这样的异常。@Stultuske我知道我没有初始化映射,因为我不知道使用哪个实现来实现它。它可以是HashMap()或ImmutableMap或任何其他。Map
接口定义了put
的替换行为-因此任何执行不同操作的实现都将违反该约定。此外,为了防止必须检查应用程序中的重复值帐户,我建议扩展HashMap类并重写put方法以检查是否存在重复,然后只检查insertwe。当外部库使用该映射时,我们只能使用第二种解决方案。但问题是它也会默默地失败。或者,我们可以抛出RuntimeException。
map.merge(key, value, (v1, v2) -> {
throw new IllegalArgumentException("Duplicate key '" + key + "'.");
});