微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java中缩小LinkedHashMap

你怎么能缩小LinkedHashMap?我重写了removeEldestEntry方法,但只在插入新值时才调用方法一次.所以没有改变使地图变小这种方式.

LinkedHashMap只提供一个普通的迭代器,并且没有任何removeLast或listIterator方法,那么如何找到最后的1000个条目并删除它们呢?

我能想到的唯一方法是迭代整个事情.但那可能需要很长时间……

每次我想删除少量元素时创建一个新地图也会破坏内存.

当removeEldestEntry方法中的maxSize减少时,可能会删除Iterator的第一个值,然后重新插入它们.然后重新插入将踢出最旧的值.这是非常难看的代码……有什么更好的想法吗?

编辑:Sry迭代顺序是最年轻的.这很容易

解决方法

对于LinekdHashMap,迭代器将从最旧到迭代迭代.如果要将LinkedHashMap缩小到可以使用以下内容的大小,则可以使用.
Map<K,V> lhm =
int desiredSize = 
for(Iterator iter = lhm.keySet().iterator();iter.hasNext()) {
   if(lhm.size() <= desiredSize) break;
   iter.remove();
}

每个条目删除大约需要20 ns.

原文地址:https://www.jb51.cc/java/128472.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐