首页 > 解决方案 > Java Map.containsKey() 方法的内部工作

问题描述

我在 java 中使用 Map<Map, Boolean> ,当我尝试使用 containsKey() 方法验证 Map 时,它总是返回 false,内部 Map 总是更新其键和值。这是看起来与此类似的代码

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class ExampleMap
{
    private static Map<Map<Long,Boolean>, Boolean> objectDetailsToSize= new HashMap<>();
    public static void main(String[] args) 
    {
        Random rn = new Random();
        int size = 10;
        Map<Long,Boolean> detailsMap = new HashMap<>();
        for(int i=0; i< size; i++)
        {
            detailsMap.put(rn.nextLong(),rn.nextBoolean());
            if(!objectDetailsToSize.containsKey(detailsMap))
            {
                    objectDetailsToSize.put(detailsMap, rn.nextBoolean());
                    System.out.println("Why containsKey() method is failing here");
            }
        }
        
    }
}

为什么 Map 的 containsKey() 方法总是在这里失败?

标签: javahashmapcontainskeyobject-comparison

解决方案


detailsMap每次循环时,您都必须创建一个新的- 或复制现有的。现在,您正在修改已放入的地图。


推荐阅读