0

我有一个HashMap<ArrayList<Integer>, Integer>. 我在替换它们之前从地图中删除对象,所以我试图避免put已经存在密钥的调用以保持地图大小相同(对于我从头开始编写的稳态进化算法) .

替代品来自ArrayList<ArrayList<Integer>> listOfArrs. 在我的一些运行过程中,Map 的大小一直在减小,因为在这个嵌套的 ArrayList 中存在重复项。在调试的过程中,我发现了这个问题:下面的代码打印出来了GOODBYE,但是没有HELLO

void updateMap(ArrayList<ArrayList<Integer>> listOfArrs) {
    //debug loop
    for (ArrayList<Integer> arr : listOfArrs) {
        if (mapObj.containsKey(arr)) System.out.println("HELLO");
    }
    for (ArrayList<Integer> arr : listOfArrs) {
        if (mapObj.containsKey(arr)) System.out.println("GOODBYE");
        mapObj.put(arr, 0);
    }
}

当我最初listOfArrs从不同的函数中获取时,我使用listOfArrs.removeIf(arr -> mapObj.containsKey(arr))它来试图防止重复,但它似乎不起作用。

4

1 回答 1

2

想通了——这是显而易见的。listOfArrs 包含我没有检查的重复项。当我在原始帖子中迭代第二个 for 循环时,它们开始出现,因为我在添加第一个重复项后正在检查地图。

于 2020-09-24T21:58:51.940 回答