2013-05-12 98 views
-1

我有“Document”作为键和“DocumentSections”作为值的哈希映射。 Map <Document, DocumentSection>。文档有许多其他成员变量(原始的和非原始的)。文档还有一个唯一的字符串值。我的问题是,如果最好通过Document中的唯一字符串值替换Document作为关键字,例如HashMap<document.getValue(), DocumentSection>。其中值是唯一的字符串。如果我使用字符串作为键而不是更多的Document对象作为键,我的程序是否会消耗更少的内存?哈希映射的内存分配

感谢

回答

1

请问我的程序占用的内存更少

不会,地图只存储到您的文档引用。对文档或字符串的引用使用相同数量的内存。

但请注意,使用可变对象作为键通常是一个坏主意。所以如果你的文档可以改变,从hashcode/equals的角度来看,你应该使用那个String来代替。

+0

感谢您的回答。我用那个Document的唯一字符串值覆盖了我的equlas和hashmethode。因此,即使文档是可变的,该字符串值也是不变的。所以我确定使用Document对象作为关键字不会有问题。是对的吗?还是我错了?谢谢 – duracell 2013-05-12 12:50:50

+0

然后你可以使用任何一种方法 - 它们将是等效的。 – assylias 2013-05-12 12:58:51

+0

如果你有重写哈希码和等于,如果协议遵循,没有什么可担心的,假设你已经完成了等于和哈希码 – abhi 2013-05-13 04:58:08

1

首先文档是错误的选择作为一个关键,因为它是一个可变的对象。

第二点是你不会通过用字符串替换键来保存内存原因即使你不用它作为键,文档对象也会留在内存中。

+0

感谢您的答案。我用那个Document的唯一字符串值覆盖了我的equlas和hashmethode。因此,即使文档是可变的,该字符串值也是不变的。所以我确定使用Document对象作为关键字不会有问题。是对的吗?还是我错了?谢谢 – duracell 2013-05-12 12:51:20

+0

Yup文件将作为一个关键然后工作。 – Lokesh 2013-05-12 12:58:00

0

实际上,如果你要使用字符串而不是文档作为键,散列函数可能需要更少的时间。

+0

嗨格里普。谢谢。你说“可能需要更少的时间”。这是一个假设还是一个事实? – duracell 2013-05-12 14:31:17

+0

考虑到文档的散列码仅调用字符串的散列码,它不会有所作为。 – assylias 2013-05-12 14:51:34