HashMap的多个实例

时间:2017-02-17 07:37:27

标签: java hashmap

是否可以使用相同的密钥创建多个哈希映射实例?例如:

while(br.readLine != ""){
 HashMap<Integer,String> hm=new HashMap<Integer,String>();  
 String[] Values = readLine.split(":");
  hm.put(1,Value[1]);  
  hm.put(2,Value[2);  
  hm.put(3,Value[3]);  
}

在这种情况下,是否会为循环的每次迭代创建一个新的hashmap实例,还是会被覆盖?

如果它被覆盖,如何在这种情况下实现地图的多个实例?

3 个答案:

答案 0 :(得分:3)

将为循环的每次迭代创建一个HashMap的新实例,并且当迭代结束时将有资格获得GC,因为没有对它的引用。

你可以在循环外创建一个List<HashMap<Integer, String>>并继续将新创建的地图添加到循环中的这个列表中,这样它们也可以在循环外部访问。

PS:如果通过&#34;覆盖&#34;,则表示&#34;覆盖&#34;,然后&#34; no&#34;,旧的hashmap实例未被&#34;重复使用&#34; ;。对于每次迭代,都会创建一个新实例。

答案 1 :(得分:0)

  

在这种情况下,是否会为循环的每次迭代创建一个新的hashmap实例,还是会被覆盖?

每次创建Map的新实例。

  

如果它被覆盖,如何在这种情况下实现地图的多个实例?

不是ovveriden。创建的多个实例。

请记住,无论何时使用新关键字,您都要创建一个新的Class实例。

一旦循环终止,它们无论如何都没用。希望你稍后在循环中对hashmap做一些事情。

答案 2 :(得分:0)

首先,您应该将地图从while语句中移出,否则在每次迭代时都会创建一个新的Map实例,从而丢失放在上一个Map实例中的内容。

我没有看到为包含几个值的每一行创建一个Map实例的重点 这似乎是一种开销。

要不覆盖与预定义键关联的值,您可以使用单个地图并将多个String值与该键相关联。
因此,您可以使用Map List String代替Map String

如果您的示例中有3个常量键,则可以在循环之前初始化List 否则,您可以动态地实例化List。

Map<Integer, List<String>> map = new HashMap<>();  

map.put(1, new ArrayList<String>());
map.put(2, new ArrayList<String>());
map.put(3, new ArrayList<String>());

while(br.readLine != nul){

  String[] values = readLine.split(":");

  map.get(1).add(values[0]);
  map.get(2).add(values[1]);
  map.get(3).add(values[2]);
}