gpt4 book ai didi

java - 如何删除要在 ConcurrentSkipListMap 中键入的元素?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:17 25 4
gpt4 key购买 nike

我有一个ConcurrentSkipListMap。我需要删除低于 key 的元素。

下面是我如何执行它:

private ConcurrentNavigableMap<Double, MyObject> myObjectsMap = new ConcurrentSkipListMap<>();

//...

myObjectsMap = myObjectsMap.tailMap(10.25, false);

看起来不错,但我对这些事实感到困惑:

1.

The returned map is backed by this map, so changes in the returned map are reflected in this map, and vice-versa.

这是否意味着垃圾收集器不会删除旧值?
IE。我们删除了旧 map ,现在有了新 map 。但是这张新 map 是由旧 map 支持的。那么,旧 map 会怎样呢?它会被删除还是会永远留在内存中?

2.

The returned map will throw an IllegalArgumentException on an attempt to insert a key outside its range.

那么,现在我不能放置小于 10.25 且大于上一个最大值的新 key 吗?

我很困惑。那么我需要如何正确地从 ConcurrentSkipListMap 中删除元素?

最佳答案

Does it mean that old values won't be removed by the garbage collector? I.e. we removed the old map and now we have a new map. But this new map is backed by the old map. So, what happens with the old map? Will it be removed or will it be sitting on a memory forever?

是的,事实上。旧 map 还在,而且会一直存在。

如果你想删除键<10.25,那么做

map.headMap(10.25, false).clear();

...这将创建该子 map ,删除它的所有元素——也将它们从原始 map 中删除——然后丢弃该子 map View ,让它被垃圾收集并留下原始 map 对象仅包含键 >= 10.25。

请注意,虽然这可以保证删除操作开始时 < 10.25 的键,但不能保证没有同时插入新键,或者新键可能会在以后插入。对此你无能为力,真的。如果你想非常确定你只对 >= 10.25 的值进行操作,那么继续使用 map.tailMap(10.25, true),但可能仍会插入其他小于 10.25 的值,它们仍会保留在内存中。

关于java - 如何删除要在 ConcurrentSkipListMap 中键入的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46329725/

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