gpt4 book ai didi

java - 在 Java 中创建一个 HashMap 副本——什么是最有效的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:31 24 4
gpt4 key购买 nike

我有一个 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 最有效的方法是什么?是否有我错过的选项(除了通过原始版本迭代,但我想这不是一个真正的选项)?

最佳答案

考虑一下您是否真的需要副本。

您说“我只需要具有相同对象的 map ,我可以在不影响其他 map 的情况下单独添加其他对象”。考虑到这一点,您可以创建 Map 的复合实现:

class MyCompositeMap<K, V> implements Map<K, V> {
final Map<K, V> mapThatYouAddThingsTo;
final Map<K, V> mapThatIsShared;
}

现在,您可以实现您的方法了。例如:

  • 您的 containsKey 方法可以首先检查 mapThatYouAddThingsTo 以查看 key 是否存在;如果是,它返回 mapThatYouAddThingsTo 的值。否则,它会检查 mapThatIsShared
  • put 方法只会将内容放入 mapThatYouAddThingsTo,永远不会放入 mapThatIsShared

实现有一些棘手的方面(比如在 keySet()entrySet() 中删除重复的键和值),但前提是 mapThatYouAddThingsTomapThatIsShared 小得多,您可以使用更少的内存。

关于java - 在 Java 中创建一个 HashMap 副本——什么是最有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43479428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com