对于加速克隆哈希映射的 Java 代码有什么建议吗?

发布于 2024-12-19 09:26:57 字数 264 浏览 1 评论 0原文

我有一个 java 类,其中包含哈希映射作为成员。这个类是由许多对象创建的。在许多这样的情况下,这种类型的一个对象被克隆到另一个对象,然后进行更改。之所以需要克隆,是因为更改会修改哈希图,并且我需要保持原始对象的原始哈希图完好无损。

我想知道是否有人对如何加快克隆部分有任何建议,或者可能有一些避免它的技巧。当我分析代码时,大部分时间都花在克隆这些哈希映射上(它们通常具有非常小的值集,大约几百个)。

(我目前正在使用 colt OpenIntDoubleHashMap 实现。)

I have a java class that contains a hash map as a member. This class is created with many objects. In many of these cases, one object of this type is cloned to another object, and then changed. The cloning is required because the changes modify the hash map, and I need to keep the original hash map of the original object intact.

I am wondering if anyone has any suggestions how to speed up the cloning part, or maybe some trick to avoid it. When I profile the code, most time is spent on the cloning these hash maps (which usually have very small set of values, a few hundreds or so).

(I am currently using the colt OpenIntDoubleHashMap implementation.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

爱给你人给你 2024-12-26 09:26:57

您应该使用更有效的算法。查看 http://code.google.com/p/pcollections/PMap 结构允许不可变的映射。

更新

如果你的地图很小(你说只有几百个),也许更有效的是两个数组:

int keys[size];
double values[size];

在这种情况下,要克隆地图,你只需要使用System.arraycopy 应该工作得非常快。

You should use more effective algorithms for it. Look at the http://code.google.com/p/pcollections/ library, the PMap structure which allows immutable maps.

UPDATE

If your map is quite small (you said only a few hundreds), maybe more effective would be just two arrays:

int keys[size];
double values[size];

In this case to clone the map you just need do use System.arraycopy which should work very fast.

柒七 2024-12-26 09:26:57

如果原始地图仅发生变化,则可以为您的地图实现 copy-on-write 包装器偶尔。

Maybe implement a copy-on-write wrapper for your map if the original only changes occasionally.

倒数 2024-12-26 09:26:57

如果只有一小部分对象发生变化,您可以实现两层结构:

  1. 第 1 层是原始地图。
  2. 第 2 层仅保留更改的元素。

原始地图中需要更改的任何对象都会被克隆、修改并放入第 2 层地图中。

查找首先参考第 2 层地图,如果未找到对象,则返回到第 1 层地图。

If only a small fraction of the objects change, could you implement a two-layer structure:

  1. Layer 1 is the original map.
  2. Layer 2 keeps the changed elements only.

Any object from the original map that needs to change gets cloned, modified an put into the layer-2 map.

Lookups first consult the layer-2 map and, if the object is not found, fall back to the layer-1 map.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文