如果为特定键更新值,则更新所有键的哈希图

我有一个哈希图,其中键为整数,值作为日期列表。我正在尝试更新特定整数的值之一。最初,所有键的日期都相同。


现在,我想将日期之一设置为 null 到 101 键,当我更新特定键时,它会针对所有键进行更新。我在哪里做错了?请建议。


这是我的代码


最初的日期是这样设置的


   // Set dates to all records

   resultDate = [Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999] // Typo here 

   Set<Integer> records= parsedResults.keySet();

        if (records.size() > 0) {               

            for (Integer record: records) {

                dateMap.get(Integer.parseInt(record));

                dateMap.put(record,resultDate);

            }

        }

然后仅将 101 的结束日期更新为 null


for (Map.Entry<Integer, List<Date>> entry : dateMap.entrySet()) {

            if(entry.getKey().equals(Integer.parseInt("101"))) {

                List<Date> dates = entry.getValue();

                if(null == effDate) {

                    dates.set(0, null);

                } else {

                    dates.set(0, effDate);          

                }

                if(null == endDate) {

                    dates.set(1, null); 

                } else {

                    dates.set(1, endDate);

                }

                dateMap.put(Integer.parseInt("101"), dates);                                        

            }

        }

初始 dateMap 响应


{101=[Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999], 102=[Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999], 103=[Mon Jan 01 00:00:00 IST 2018, Fri Dec 31 00:00:00 IST 9999]}

当我更新为 null 之后,


{101=[Mon Jan 01 00:00:00 IST 2018, null], 102=[Mon Jan 01 00:00:00 IST 2018, null], 103=[Mon Jan 01 00:00:00 IST 2018, null]}


ABOUTYOU
浏览 105回答 2
2回答

慕哥6287543

问题是对于您配对相同列表对象的每个键,在 for 循环中使用new ArrayList(Collection<? extends E> c)构造函数每次创建新对象if (records.size() > 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for (Integer record: records) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dateMap.get(Integer.parseInt(record));&nbsp; //you can remove this line&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dateMap.put(record,new ArrayList(resultDate));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }公共 ArrayList(集合 c)按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

偶然的你

您的值可能使用一个带有 diff 别名的列表List one = new AraayList();map.put("k1", one);map.put("k2", one);List alias = one;map.put("k3", alias);这些值使用相同的实例,当您更新一个时,其他的会看到更改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java