如何动态创建HashMap

Han*_*ath 1 java

我有.txt以下列方式使用5L值(行)的文件,并且还具有分区大小50000.

 1
 3
-1546.9
-67.90
3456
.
.
.
Run Code Online (Sandbox Code Playgroud)

通过以下示例,您可以从我的角度理解分区的含义.

将文件数据导入列表后,我们可以通过以下方式看到.

 importingdata={1,2,3,4,5,.........500000};
Run Code Online (Sandbox Code Playgroud)

分区后,您可以通过以下方式查看.

PartitionList={{1,2,3,...50000},{50001,....,100000},{100001,......,150000},...{450000,.....500000}};
Run Code Online (Sandbox Code Playgroud)

partitionList数据类型是ArrayList<HashMap<Integer,Double>>.it表示分区列表的所有子列表HashMap<Integer,Double>.

所有HashMap列表以1 to 50000下列方式从.like 开始其键值.

     PartitionList={{1->1,2->2,3->3,...,50000->50000},{1->50001,.....,50000->100000},{1->100001,....,50000->150000},...,{1->450000,.....,50000->500000}};
Run Code Online (Sandbox Code Playgroud)

我希望在文件导入时间的同时以上述方式排列文件数据.

为此我尝试了示例代码,但它不起作用.

public static void main(String[] args) {
    ArrayList<HashMap<Integer, Double>> finalList=new ArrayList<>();
    HashMap<Integer, Double> hash1=new HashMap<>();
    hash1.put(1, 1.0);
    hash1.put(2, 2.0);
    hash1.put(3, 3.0);
    finalList.add(hash1);
    System.out.println(finalList.size());
    System.out.println(hash1.size());
    hash1.clear();
    System.out.println(hash1.size());
    hash1.put(1, 1.0);
    hash1.put(2, 2.0);
    hash1.put(3, 3.0);
    finalList.add(hash1);
    System.out.println(finalList.size());
    System.out.println(hash1.size());
    hash1.clear();
    System.out.println(hash1.size());
    HashMap<Integer, Double> hash2=finalList.get(1);
    HashMap<Integer, Double> hash3=finalList.get(2);
    System.out.println(hash2.size());
    System.out.println(hash3.size());
}
Run Code Online (Sandbox Code Playgroud)

我希望,你们明白我在尝试什么.在这里我提到5L行,但在我的实际情况下,我正在处理80L所以建议我优化代码.

谢谢

ppe*_*rka 6

HashMap是可变的!hashMap引用仍然相同.当你这样做:

hash1.clear();
Run Code Online (Sandbox Code Playgroud)

您清除原始地图实例.这意味着,您放入列表的地图实例将被清除.

你应该做

hash1 = new HashMap<Integer, Double>();
Run Code Online (Sandbox Code Playgroud)

代替.这会更新变量对HashMap()的新实例的引用.