-1

我使用“Document”作为键和“DocumentSections”作为值的 hashMap。Map <Document, DocumentSection>. Document 有很多其他的成员变量(原始的和非原始的)。Document 也有一个唯一的 String 值。我的问题是,如果最好通过 Document 中的唯一字符串值替换 Document 作为键,例如HashMap<document.getValue(), DocumentSection>. 其中 value 是一个唯一的字符串。如果我使用字符串作为键而不是更多的 Document 对象作为键,我的程序会消耗更少的内存吗?

谢谢

4

3 回答 3

1

我的程序会消耗更少的内存吗

不,地图仅存储对您的文档的引用。并且对 Document 或 String 的引用使用相同数量的内存。

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

于 2013-05-12T12:37:36.560 回答
1

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

第二点是,您不会通过将 key 替换为字符串来节省内存,因为即使您不将其用作 key,文档对象也会保留在内存中。

于 2013-05-12T12:37:47.413 回答
0

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

于 2013-05-12T13:45:38.580 回答