我们正在创建一个由JADE Agent结构的AID组成的树结构。我们选择递归地执行此操作,以便无论系统中当前有多少个代理都可以执行代码,可以动态更改树结构以适合系统中当前的代理数量。我不确定是否需要设置某种锁以确保在不损害结构完整性的情况下读写Map对象。

这是引起问题的代码。

// BuildHierarchy method used to create the hierarchy based on Monitor Agents in the system
private void BuildHierarchy(Map<AID, Double>freqList, ArrayList<AID> childless, DefaultMutableTreeNode node){
    int i = 0;
    //creates an iterator for the freqList
    Iterator iter = freqList.entrySet().iterator();

    while(iter.hasNext()&& i < 2){

        Map.Entry pairs = (Map.Entry)iter.next();
        //if (i<2){
            setParentNode((AID)pairs.getKey(), node);
        //}
        freqList.remove(pairs.getKey());
        i++;
    }
    BuildHierarchy(freqList, childless, node.getNextNode());
    BuildHierarchy(freqList, childless, node.getNextNode().getNextSibling());

}

最佳答案

迭代时,您不能修改Set(或底层的Map),除非迭代器自己的remove操作,否则将抛出ConcurrentModificationException。尝试

iter.remove();

代替
freqList.remove(pairs.getKey());

09-11 04:43