有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多实例HashMap

可以用同一个键创建多个hashmaps实例吗?例如:

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) 个答案

  1. # 1 楼答案

    首先,您应该将映射从while语句中移出,否则在每次迭代中都会创建一个新的Map实例,因此您会丢失放置在以前使用的映射实例中的内容

    我看不出为包含几个值的每条线创建贴图实例的真正意义
    这似乎是一种开销

    要不覆盖与预定义键关联的值,可以使用单个映射并具有多个与该键关联的String
    因此,您可以使用Mapof Listof String而不是Mapof String

    如果您有3个常量键(如示例中所示),则可以在循环之前初始化列表
    否则,您可以动态实例化列表

    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]);
    }
    
  2. # 2 楼答案

    In this case, will new instance of hashmap will be created for each iteration of the loop or will it get overriden?

    每次创建的映射的新实例

    If it gets overriden, how to implement multiple instances of the map in this scenario?

    不是奥弗雷登。已创建多个实例

    请记住,无论何时使用new关键字used,都是在创建类的新实例

    而且,一旦循环终止,它们就不再有用了。希望您正在hashmap上做一些事情,稍后在循环中

  3. # 3 楼答案

    将为循环的每个迭代创建一个新的HashMap实例,并且在迭代结束时将符合GC的条件,因为没有对它的引用

    您可以在循环外部创建一个List<HashMap<Integer, String>>,并将新创建的映射不断添加到循环中的此列表中,以便它们也可以在循环外部访问

    PS:如果“overrided”的意思是“overrided”,那么“no”,则旧的hashmap实例不会被“重用”。对于每个迭代,将创建一个新实例