哈希映射的内存分配

时间:2013-05-12 12:34:06

标签: java memory hashmap

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

由于

3 个答案:

答案 0 :(得分:1)

  

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

实际上,如果你使用字符串而不是文档作为键,哈希函数可能会花费更少的时间。