提问人:edith finch 提问时间:11/17/2023 最后编辑:Mark Rotteveeledith finch 更新时间:11/17/2023 访问量:42
在短时间内从地图中删除的最佳方法
Best way to remove from map in short amount of time
问:
我有这个记录
private static record BlockedPattern (Class<? extends Pattern> getClazz, Predicate<MyObject> getPredicate, long getActiveUntil) {}
我像这样存储在 ConcurrentHashMap 中
private final Map<Class<? extends Pattern>, BlockedPattern> _patterns = new ConcurrentHashMap<>();
我的代码每 400 毫秒检查一次,使用检查时间是否经过或谓词是否为 false 的方法对每个对象执行一次检查。考虑到我可以有 400-800 个对象,这意味着每 400 毫秒进行 800 次检查,甚至更多 (Java 21)。删除方法中传递的模式或错误谓词的最佳方法是什么?isBlocked
isBlocked
使用 removeIf,使用迭代器还是什么?我想要最快的选择和轻便的方式。
注意:map 最多可以保留 3 个元素。没有更多,因为我只有 2-3 个模式。
removeIf 并检查 System.currentMillisecond() 是否> getActiveUntil 或 !getPredicate.test()
答:
0赞
Mbali Hlubi
11/17/2023
#1
对于基于时间条件和谓词的高性能和轻量级对象删除,可以使用“removeIf”和自定义删除条件的组合。在这种情况下,可能不需要使用迭代器。
评论