是否可以使用相同的密钥创建多个哈希映射实例?例如:
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实例,还是会被覆盖?
如果它被覆盖,如何在这种情况下实现地图的多个实例?
答案 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]);
}