【发布时间】:2017-09-14 17:18:11
【问题描述】:
我有一个 HashMap 需要复制约 100 000 次,并且副本将单独扩展。由于 100 000 个副本很多(这不是我的代码中唯一一次发生这种情况),这目前是我实现中的一个主要瓶颈(事实上,它经常发生,占用了 45% 的运行时间,并且有不幸的是没有办法限制这个数字),所以我正在寻找最有效的方法来做到这一点。
我找到了以下选项来创建 HashMap 原始的浅表副本:
//1
HashMap<T> map = (HashMap<T>) original.clone()
和
//2
HashMap<T> map = new HashMap<T>();
map.putAll(original);
和
//3
HashMap<T> map = new HashMap<T>(original);
根据您的经验,复制 HashMap 最有效的方法是什么?有没有我错过的选项(除了迭代原始版本,但我想这不是一个真正的选项)?
【问题讨论】:
-
尽量避免使用克隆方法...
-
我能问一下为什么需要 100,000 个 HashMap 副本吗?我无法想象有这种要求的场景
-
Flyweight pattern 可能对您的情况有所帮助。
-
您的副本是否会被修改?如果实际上有相当大的比例没有修改,那么您可能会受益于推迟复制,直到您真正需要它。有多种方法可以实现这一点,但我立即想到的方法都涉及在地图周围创建一个持有者或包装类。
-
我倾向于为持久数据结构找到一个库,它可以有效地支持这种操作。