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

时间:2011-10-13 06:08:31

标签: java memory collections hashmap

有没有办法可以通过trimToSize()方法使用ArrayList来压缩HashMap?

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

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:5)

嗯,你不需要手动迭代 - 你可以使用:

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

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

无论哪种方式,我都不相信你错过任何东西 - 我认为在当前的API中没有任何方法可以执行“修剪”操作。与ArrayList不同,这样的操作无论如何都会相当复杂(如扩展) - 它不仅仅是创建新数组和执行单个数组复制的情况。条目需要重新分配。让HashMap在内部完成此操作的好处可能只是哈希码不需要重新计算。

答案 1 :(得分:-1)

如果您使用trove library而不是支持哈希映射和哈希集修剪(请参阅THashMap对象,紧凑方法),最重要的是,当地图变得太稀疏时,会自动修剪对象的删除。这应该比使用标准java HashMap实现构建新映射更快(可能)它不必根据其哈希码对对象进行重新排序,但可以使用它已经知道的顺序。