为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ABOUTYOU 2022-10-20 17:09:28
我有一个哈希图,其中键为整数,值作为日期列表。我正在尝试更新特定整数的值之一。最初,所有键的日期都相同。现在,我想将日期之一设置为 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 的结束日期更新为 nullfor (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]}
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

问题是对于您配对相同列表对象的每个键,在 for 循环中使用new ArrayList(Collection<? extends E> c)构造函数每次创建新对象


if (records.size() > 0) {               

        for (Integer record: records) {

            dateMap.get(Integer.parseInt(record));  //you can remove this line

            dateMap.put(record,new ArrayList(resultDate));

        }

    }

公共 ArrayList(集合 c)


按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。


查看完整回答
反对 回复 2022-10-20
?
偶然的你

TA贡献1841条经验 获得超3个赞

您的值可能使用一个带有 diff 别名的列表


List one = new AraayList();

map.put("k1", one);

map.put("k2", one);

List alias = one;

map.put("k3", alias);

这些值使用相同的实例,当您更新一个时,其他的会看到更改。


查看完整回答
反对 回复 2022-10-20
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信