1

我基本上只是想知道制作 HashMaps 使用了多少内存。

在获取时制作一个类型的 HashMap 并进行转换会更好Object吗?还是可以为我要存储的不同类型制作许多 HashMap?

例子:

HashMap<Integer,Type1> map1;
HashMap<Integer,Type2> map2;
HashMap<Integer,Type3> map3;

对比

HashMap<Integer, Object> map;
// And getting it by
(Type1)map.get(Integer); //or (Type2), etc
4

4 回答 4

2

我会避免创建一个HashMap对象值。利用 的通用特性HashMap来避免在代码中到处出现强制转换。关于记忆,如果合适的话,我会HashMap在它出现和发出时使用对记忆的担忧,一旦它抬起头来解决它。大多数正常的初始化不HashMap应该产生内存问题。

于 2013-03-12T00:31:35.277 回答
1

如何使用这些 HashMap 很重要。如果您要存储多种类型的值并使用一组键,那么您应该使用一个 HashMap。如果您要存储多种类型的值并为每种类型使用不同的键集,则应该使用多个映射。

100 个 HashMap 和 1 个之间的内存成本差异非常小。您会注意到的最重要的事情是,如果您有很多微小的 HashMap(例如,数千张地图,每个地图中只有 2 或 3 个值),那么您将浪费大量空间,因为默认构造函数需要约 16 个值. 要解决此问题,只需使用预期大小初始化 HashMap:

HashMap<Foo> fooMap = new HashMap<Foo>(5);
于 2013-03-12T00:41:06.147 回答
0

在运行时,hashmap 的“类型”是什么并不重要,因为 JVM 甚至不知道它。

于 2013-03-12T00:31:48.300 回答
0

我会说这将是一种洗涤。使用多个地图,您有多个对象和多个哈希表(它们具有一些最小的“开销”),但超过一定的大小,初始成本会被“隐藏”,并且多个表的哈希速度会稍微快一些。

但是,转换的开销没有区别,因为当您使用泛型时,转换就在那里,只是隐藏了

于 2013-03-12T00:36:44.807 回答