Java 局部变量中的alterdictionary对象

Java 局部变量中的alterdictionary对象,java,arraylist,hashmap,Java,Arraylist,Hashmap,我试图从方法ArrayList中删除该方法,并在一次查找中检查ArrayList是否为空。 这需要两次查找 private Map<String, List<Method>> events; public void removeEvent(String eventName, Method method){ try{ events.get(eventName).remove(method); if(events.get(eventN

我试图从方法ArrayList中删除该方法,并在一次查找中检查ArrayList是否为空。 这需要两次查找

private Map<String, List<Method>> events;

public void removeEvent(String eventName, Method method){
    try{
        events.get(eventName).remove(method);
        if(events.get(eventName).size() == 0){
            events.remove(eventName);
        }
    }
    catch (Exception e){

    }
}
私有映射事件;
public void removeEvent(字符串eventName,方法){
试一试{
events.get(eventName).remove(方法);
if(events.get(eventName.size()==0){
events.remove(eventName);
}
}
捕获(例外e){
}
}

如您所见,它会查找方法的ArrayList以删除方法,然后再次查找以查看其长度是否为零,然后再次查找以删除HashMap条目。它们是一种至少结合前两次查找的方法吗?

下面的代码可能对您的情况有所帮助。 检查列表的大小不需要第二次查找

public void removeEvent(String eventName, Method method){
    try{
        List<Method> methods = events.get(eventName);
        methods.remove(method);
        if(methods.size() == 0){
            events.remove(eventName);
        }
    }
    catch (Exception e){

    }
}
public void removeEvent(字符串事件名,方法){
试一试{
列表方法=events.get(eventName);
方法:移除(方法);
if(methods.size()==0){
events.remove(eventName);
}
}
捕获(例外e){
}
}

您可以将其更改为以下方式:

List<Method> methods = events.get(eventName);
if (methods == null) {
    return;
}
methods.remove(method);
if (methods.isEmpty()) {
    events.remove(eventName);
}
List methods=events.get(eventName);
if(方法==null){
返回;
}
方法:移除(方法);
if(methods.isEmpty()){
events.remove(eventName);
}

我想没有,因为在运行时,如果键的值(即集合)为空,映射不知道要执行什么操作。您可以编写自己的映射实现来实现这一点。但还是有些地方需要手动操作。