gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:45:12 25 4
gpt4 key购买 nike

我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com