创建多个HashMaps有多糟糕?

时间:2013-03-12 00:29:23

标签: java hashmap

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

创建类型为Object的HashMap并在获取时进行转换是否更好?或者可以为我想要存储的不同类型制作许多HashMaps?

示例:

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

VS

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

4 个答案:

答案 0 :(得分:2)

我会避免使用object值创建HashMap。利用HashMap的通用功能,避免在代码中遍布各处。关于内存,我会使用HashMap,如果合适的话,在内存成为问题时会对内存产生担忧,一旦问题就解决了问题。 HashMap的大多数正常初始化不应该产生内存问题。

答案 1 :(得分:1)

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

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

HashMap<Foo> fooMap = new HashMap<Foo>(5);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我会说这会是一种洗漱。对于多个映射,您有多个对象和多个哈希表(它们具有一些最小的“开销”),但超出一定的大小,初始成本被“隐藏”,并且多个表将以更快的速度散列。

然而,演员阵容的开销没有区别,因为当您使用泛型时,演员阵容就在那里,只是隐藏