当前位置: 首页 > 知识库问答 >
问题:

添加新的键值对将替换HashMap中的其他键值

冯阳成
2023-03-14

因此,我有一个hashmap ,它存储每个字符串的arraylist。但是当我用ArrayList的新值添加另一对时,其他键值将被替换。因此,不同键的所有值都是相同的。

public class Reports{
    
    private ArrayList<Resource> resourceList;
    private HashMap<String,ArrayList<Resource>> consolidatedAttendance = new HashMap<String,ArrayList<Resource>>(); 
    
    public void readReport(String reportFile){
        //initialized with resources from config file
        ArrayList<Resource> repResourceList = new ArrayList<Resource>(getResourceList());

        try (BufferedReader br = new BufferedReader(new FileReader(reportFile))) {
            String line;
            line = br.readLine(); // disregards first line (columns)
            while ((line = br.readLine()) != null) {
                
                if(line.length()==0){
                    break;
                }
                
                //store each resource status in resourceList
                String[] values = line.split(",");      
                String resourceName = values[1], resourceStatus = values[2];
                int resourceIndex = indexOfResource(resourceList, resourceName);
                // to add validation 
                if(resourceIndex!=-1){
                    repResourceList.get(resourceIndex).setStatus(resourceStatus);
                }
                
            }
        }catch(IOException e){
            e.printStackTrace();
        }
        
        
        //get Date
        String reportFilename = reportFile.substring(0, reportFile.indexOf("."));
        String strDate = reportFilename.substring(reportFilename.length()-9);
        consolidateRecords(strDate, new ArrayList<Resource>(repResourceList));
        
    }
    
    
    public void consolidateRecords(String strDate, ArrayList<Resource> repResourceList){
        //consolidate records in hashmap
        consolidatedAttendance.put(strDate, repResourceList);
        
        // test print
        
        for (String key: consolidatedAttendance.keySet()){
            ArrayList<Resource> resources = consolidatedAttendance.get(key);  
            for(Resource resource: resources){
                System.out.println(key+": "+resource.getNickname()+" "+resource.getEid()+" "+resource.getStatus());
            }
        } 
    }
}

添加的第一个键:

"21-Dec-20": John Working
"21-Dec-20": Alice Working
"21-Dec-20": Jess Working

对于第二个键,列表中有不同。但是,当添加第二个键(在put()方法之后)时,第一个键的值已经被替换。

"21-Dec-20": John SL
"21-Dec-20": Alice Working
"21-Dec-20": Jess SL

"28-Dec-20": John SL
"28-Dec-20": Alice Working
"28-Dec-20": Jess SL

共有1个答案

董同
2023-03-14

您的映射的值是列表,其元素与GetResourcelist()返回的列表的元素相同。创建列表的副本(两次)并不能改变这一点。

如果每次调用GetResourcelist()返回包含相同实例的列表,则映射中的所有键都将与包含相同实例的不同列表关联。

 类似资料:
  • 主要目标是用hashmap中的值替换字符串中的一些单词作为关键字(关键字是文本中的单词)。钥匙的格式不同。例如:主文本:“Lookahead和Lookahead,统称为Lookahead,是[0-23]断言”hashmap:{Lookahead=test1,Lookahead=test2,Lookahead=test3,[0-23]=newvalue}预期输出:“test1和test2,统称为te

  • 我通过一个接一个地放置值来创建HashMap。当我在每次迭代后打印hashmap时,生成的hashmap包含所有键的相同值。我不明白为什么会这样。我已经粘贴了下面的输出 HashMap(String,List(Object))mRestrictions; 输出:- 逐个限制:-{profile\u name=[Test1]} 逐个限制:-{profile\u name=[url],url=[url

  • 假设我有一个Christmas list对象,它携带一个用于圣诞礼物的ArrayList和另一个用于收件人的字符串。我对这个客户端有以下方法: 所以基本上,我试图在Hazelcast IMAP中初始化一个新的键/值对。我尝试使用christmaslistimap.put()和christmaslistimap.set(),但它们似乎都不起作用。至少,我需要知道如何添加一个新的键让IMap识别。

  • 我需要一些帮助来替换HashMap中的值。HashMap包含每个键的多个值,这些值是从ArrayList中添加的。我想做的是替换键中的一个元素。例如,用户输入键1和索引2,这将是该键的值[1]=[A, B, C, D],索引2将是字母“C”,我想用“X”替换它,这样输出将是[1]=[A, B, X, D],这将在一个同时循环中。 输出: 1 张 AB 光盘 2 张 AB 光盘 3 张 AB 光盘

  • 问题内容: 嗨,我有一个csv叫做。我试图逐行读取csv并将值转换为哈希键值对。这是代码:- csv文件如下:- 当我运行此代码时,出现此错误:- 谁能帮助我修复代码并找出程序中的错误? 问题答案: 在字符串中,当你把它分解的第一次只包含如没有在这样就会导致异常 如果不需要1,2等。可以查看以下代码:

  • 如果你看看hashMap里面java的hashCode方法,你会发现: 因此,当您将内容插入哈希映射时,哈希映射的哈希代码将更改。因此,如果我们在哈希集中插入一个空的哈希映射,然后向此哈希映射插入一些内容,然后调用 它将返回 。为什么 Java 允许这样的行为?这很容易导致哈希集中出现重复的项目。 请尝试运行以下代码: