繁体   English   中英

Java:压缩HashMap(类似于ArrayList#trimToSize)

[英]Java: Compact a HashMap (analogue of ArrayList#trimToSize)

从某种意义上讲,有没有一种方法可以压缩HashMap,可以通过它的trimToSize()方法使用ArrayList?

我能想到的一种方法是遍历当前映射中的所有条目并填充一个新条目,然后用新条目替换原始条目。

有没有更好的方法可以做到这一点?

好吧,您无需手动进行迭代-您可以使用:

map = new HashMap<String, String>(map); // Adjust type arguments as necessary

我相信这将为您完成所有迭代。 clone() 可能会做同样的事情,但我不确定。

无论哪种方式,我都不相信您会丢失任何东西-我认为在当前的API中没有任何方法可以执行“修剪”操作。 ArrayList不同,此操​​作无论如何都是相当复杂的(因为扩展需要)-这不仅仅是创建新数组并执行单个数组副本的情况。 条目需要重新分配。 使HashMap本身在内部执行此操作的好处可能只是哈希码不需要重新计算。

如果使用trove库,则它支持哈希映射和哈希集修剪(请参见THashMap对象,紧凑方法),并且最好的是,当地图太稀疏时,将在删除对象时自动修剪。 这应该比使用标准java HashMap实现构建新地图更快,因为(大概)它不必根据对象的哈希码对对象进行重新排序,而只需使用其已知的顺序即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM