【问题标题】:Adding entries to LinkedList inside ConcurrentHashMap not working在 ConcurrentHashMap 中向 LinkedList 添加条目不起作用
【发布时间】:2015-03-30 11:18:06
【问题描述】:

我有一个 ConcurrentHashMap,它包含一个字符串作为键和 LinkedList 作为值。列表的大小不应超过 5。我正在尝试向列表中添加一些元素,但是当我打印出地图时,我只看到最后添加的元素。这是我的代码:

private ConcurrentHashMap<String, LinkedList<Date>> userDisconnectLogs = new ConcurrentHashMap<String, LinkedList<Date>>();

public void addNewDateEntry(String userId, LinkedList<Date> timeStamps) {
    if (timeStamps.size() >= 5) {
        timeStamps.poll();
        timeStamps.add(new Date());
        userDisconnectLogs.put(userId, timeStamps);
    } else {
        timeStamps.add(new Date());
        userDisconnectLogs.put(userId, timeStamps);
    }

    for (Entry<String, LinkedList<Date>> entry : userDisconnectLogs
            .entrySet()) {
        String key = entry.getKey().toString();
        ;
        LinkedList<Date> value = entry.getValue();
        System.out.println("key: " + key + " value: " + value.size());
    }
}

谢谢!

【问题讨论】:

  • 你的钥匙一直都是一样的。
  • 显示你正在调用的代码addNewDateEntry()?
  • 类似userService.addNewDateEntry(userService.getUserIdByPrincipal(disconnectedUser), (LinkedList&lt;Date&gt;) timeStamps);
  • timeStamps 的值是多少?作为旁注,你为什么需要投射它?

标签: java dictionary linked-list


【解决方案1】:

这里对于 hashMap 的 key 必须是唯一的。从这段代码看来,key 总是相同的,所以它会一直覆盖数据。

【讨论】:

  • 是的,它会是一样的,但我希望该键对应的LinkedList的值增加。
  • 因为 hashmap 键必须是唯一的,这是第一个约束,因此您可以将用户 ID 增加一个数字并使其唯一,或者您可以选择其他唯一键。
  • 问题与key无关,我知道它必须是唯一的。我的问题是我不能向 LinkedList 添加多个元素来表示该值。
  • System.out.println("key: " + key + " value: " + value.size());, 这里写的是 value.size() 而不是 value.get(index ) , 所以你想打印大小还是值??。
  • 这是您面临的问题吗??
猜你喜欢
  • 2018-06-24
  • 2018-01-31
  • 2017-08-04
  • 2021-04-22
  • 2018-03-31
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多