如何删除元素以键入ConcurrentsKiplistMap



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

这是我可以执行的方式:

private ConcurrentNavigableMap<Double, MyObject> myObjectsMap = new ConcurrentSkipListMap<>();
//...
myObjectsMap = myObjectsMap.tailMap(10.25, false);

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

1。

返回的地图由此地图支持,因此在返回的地图中更改 反映在此地图中,反之亦然。

这是否意味着垃圾收集器不会删除旧值?
IE。我们删除了旧地图,现在有了新的地图。但是这张新地图由旧地图提供支持。那么,旧地图会发生什么?它会被删除还是永远坐在记忆中?

2。

返回的地图将尝试尝试 插入范围之外的钥匙。

所以,现在我不能放置小于10.25且超过最后一个最大值的新键?

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

这是否意味着垃圾收集器不会删除旧值? IE。我们删除了旧地图,现在有了新的地图。但是这张新地图由旧地图提供支持。那么,旧地图会发生什么?它会被删除还是永远坐在记忆中?

是的,实际上。旧地图仍在附近,它将留在周围。

如果要删除键&lt;10.25,然后做

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

...它将创建该子图,删除其所有元素 - 也将其从原始地图中删除 - 然后丢弃该子束视图,让其收集垃圾,然后将您与原始地图对象保持仅包含键> = 10.25。

请注意,虽然可以保证删除&lt的密钥;10.25当操作开始时,无法保证没有同时插入新密钥,或者以后可能会插入新密钥。实际上,您无能为力。如果您想非常确定自己仅在值> = 10.25上运行,那么继续使用map.tailMap(10.25, true),但是其他小于10.25的值仍可能被插入,并且它们仍然会在内存中。

相关内容

  • 没有找到相关文章

最新更新