在Java中,将longs映射到对象的最高性能(时间,内存)方式是什么?

时间:2010-10-15 07:55:57

标签: java performance data-structures

我在内存中存储了一个(可能很大)的对象,我想通过long标识符引用它们。目前,我使用的是标准HashMap<Long, MyClass>。我想知道是否有更好的方法可以做到这一点,因为直觉上,我认为在long中包裹Long并不是真的有意义。

请注意,到目前为止,这个问题仍然有些学术性,到目前为止,我对当前解决方案没有任何性能问题。它可能永远不会变成一个。然而,很快,我预计我需要处理的数据会有大幅增长,而且我开始编制一个想法列表,如果事情变得缓慢,我可能会想看看。

3 个答案:

答案 0 :(得分:4)

首先,我真的怀疑这应该是必要的。但如果确实如此,请查看trove4j中的TLongObjectHashMap。这确实如此:)

对于记录,它不包装散列映射,而是使用数组来存储状态。

在该网站上还有一些benchmarks,这可能会有所帮助。

答案 1 :(得分:0)

您可以使用对于密钥而不是Long包装器的原语来编写自己的HashMap实现。切割和粘贴JDK HashMap并不难做到这一点。

你可以保留它,直到你需要它,因为重构应该很简单。 Java的自动装箱将使您可以放入新课程。使用原始long调用java.util.HashMap现在可以在不加框的情况下工作。您需要更改缺少密钥大小写需要null的代码,以检查是否为零。

答案 2 :(得分:0)

如果Java提供的地图不足以满足您的需求,我会感到非常惊讶。如果您的数据集变得如此之大以至于内存将成为一个问题,那么使用数据库会更有意义。