有什么方法可以使几个对象初始化更紧凑?

时间:2014-06-18 01:23:39

标签: java initialization

我有以下几个HashMap初始化(之前在别处定义):

hm1 = new HashMap<String, Integer>();
hm2 = new HashMap<String, Integer>();
.
.
.
hmn = new HashMap<String, Integer>();

一个想法是将引用存储到数组中,然后在for循环中创建对象,但这将分配不必要的空间。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

  

一个想法是将引用存储到数组中,然后在for循环中创建对象,但这将分配不必要的空间。有什么想法吗?

数组将为每个HashMap引用使用一个单词,为对象标题使用~3个单词。 与HashMap对象占用的空间相比,这是微不足道的。

我认为你在这里做的事情(在驳回基于阵列的解决方案中)是“过早优化”。

FWIW,我想不出一个更好的方法 1 而不是使用HashMap对象数组。如果ArrayList对象的数量是动态的,那么HashMap替代方案会更好,但是您要替换一组实例变量,因此它为您的用例 2提供了明显的优势


1 - 您可以使用反射,但代码不必要地复杂,并且可能易碎。此外,您最终可能会使用更多空间来表示可执行代码,而不是在空间中保存以表示数组。我不推荐这种方法。

2 - 它使用更多空间,但不应该在你的议程上。

答案 1 :(得分:1)

您似乎需要首先解决设计问题:使用数组(或List)的数据并通过数组中的索引引用它们,而不是使用单独的变量:

Map<String, Integer>[] maps = new Map<String, Integer>[someNumber];
for (int i = 0; i < maps.length; i++)
    maps[i] = new HashMap<String, Integer>();

如果您的变量是字段,请将初始化放在构造函数中。

答案 2 :(得分:1)

使用ArrayList存储对象。它是动态的,它不会在初始化之前保留引用

List<HashMap> array = new ArrayList<HashMap>();
for (int i = 0; i < NUM; i++)
    array.add(new HashMap<String, Integer>());
相关问题