java - hashMap的put方法覆盖已存储数据的值

标签 java hashmap

我使用 hashMap 来存储从文件读取的数据(证书详细信息)。 键和值存储在 hashMap 中,但调用 put 方法后,所有值都具有最后添加的条目的值。 我想这也与 hashmap.get() returning wrong values even though they are all correct in the map 但我没有看到我的错误:

HashMap<String, String[]> certDataMap = new HashMap<String, String[]>();
    String line="";
    String bankName = "", validTill = "", fingerPrint = "";
    File certDat = new File(certDataFile);
    int cntEntries=0;
    String[] data = {"dummy", "dummy"};

    if (certDat.exists()) {
        try {
            Scanner scanner = new Scanner(certDat);
            while (scanner.hasNextLine()) {
                line=scanner.nextLine();
                bankName=line.split("\\|")[0];
                validTill=line.split("\\|")[1];
                fingerPrint=line.split("\\|")[2];
                logger.debug("line: {} bankName: {} validTill: {} fingerPrint: {}",line, bankName, validTill, fingerPrint);
                data[0]=validTill;
                data[1]=fingerPrint;
                certDataMap.put(bankName, data);
                debugCertMap();
                cntEntries++;
            }
            scanner.close();
            logger.debug("{} read from {}", cntEntries, certDataFile);
        } catch (IOException e) {
            logger.error(certDataFile,e);
        }
    } else
        logger.error(certDataFile+" not found! New file will be created if certificates were downloaded");

问题是 Jonathan 提到的在循环外部声明字符串数组数据:

        while (scanner.hasNextLine()) {
            line=scanner.nextLine();
            bankName=line.split("\\|")[0];
            validTill=line.split("\\|")[1];
            fingerPrint=line.split("\\|")[2];
            logger.debug("line: {} bankName: {} validTill: {} fingerPrint: {}",line, bankName, validTill, fingerPrint);
            String[] data = {validTill, fingerPrint};
            certDataMap.put(bankName, data);
            debugCertMap();
            cntEntries++;

最佳答案

对象实际上是引用,并且您对每一行使用相同的对象数据。使用新对象。

关于java - hashMap的put方法覆盖已存储数据的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53775941/

相关文章:

java - 无法对基本类型 double 调用 toFixed(int)

java - 您可以在 jetty-env.xml 中为 Web 应用程序上下文设置初始化参数吗?

java - Java 中的尾调用优化

java - 哈希表使用多少内存?

java list<map> 具有重复值

java - 为什么要使用 HashMap ?

C字典/ map

java - JVM Clustering如何进行负载均衡。

java - 在 Netbeans 7.4 中将 Java 应用程序转换为 JApplet

java - 为什么 java.util.HashMap 中的支持表索引对于两个不同的提供键可以相同?