Java Map.containsKeyArrayList一行返回false,下一行返回true

问题描述

我有一个HashMap<ArrayList<Integer>,Integer>。我要先从Map中删除对象,然后再替换它们,因此,我试图避免put调用已经存在的密钥,以保持Map大小不变(对于稳态演化算法,我m从头开始写作。

替换来自ArrayList<ArrayList<Integer>> listofArrs。在我的一些运行中,由于此嵌套ArrayList中存在重复项,因此Map的大小一直在减小。在调试过程中,我发现了这个问题:以下代码显示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))来尝试防止重复,但似乎不起作用。

解决方法

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