0

根据这个答案ChronicleMap 的 entrySet().iterator() 将转储内存中的所有对象。

我不想加载内存中的所有对象并过滤内存中的整个地图 - 这违背了 Chroniclemap 的目的。

所以现在,给定一个编年史地图类型 <LongValue, Pojo>,以及 0-1000 范围内的键,我将如何 -

  1. 获取范围 >= 500 的键
  2. 删除范围 <500 的键
4

1 回答 1

1

您可以使用 ThreadLocal 来缓存此值或根据需要创建。

// cache as desired
LongValue key = Values.newHeapInstance(LongValue.class);

在不产生垃圾的情况下获取许多值

// cached value for a Pojo
Pojo pojo = acquirePojo();

for (int i = 500; i < max; i++) {
    key.setValue(i);
    Pojo p2 = map.getUsing(key, pojo);
}

这将创建很少或没有垃圾来删除条目

for (int i = 0; i < 500 ; i++) {
    key.setValue(i);
    // assume map was built with removeReturnsNull(true)
    map.remove(key);
}
于 2020-11-11T15:29:14.207 回答