JAVA在方法调用中创建ArrayList <string>。

时间:2018-10-24 12:21:48

标签: java arraylist

我正在研究一个简单的程序,该程序从文件中读取数据并将其放入定义为包含每个列的ArrayList对象的映射的容器中。列名放在一个枚举中。

问题是,ArrayLists是原始数据,而我的数据是String类型。

import java.io.*;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import static lista3.ColumnName.*;

public class Zad2 {


    //Name,Surname,Salary,District,Position
    Map<ColumnName, ArrayList> columnHolder = new TreeMap<>();

    //combination of a map, holding ArrayLists, represents an extendable table.
    //Notation holder.get(ColumnName c).get(index j) represents getting the value from specified column
    //and row index j

    //an iterable holder of columns
    private final static ColumnName[] ITERABLE_COLUMN_NAMES = ColumnName.values();

    //initialization block for all columns present in ColumnName Enum.
    {
        for (ColumnName c: ITERABLE_COLUMN_NAMES) {
            columnHolder.put(c, new ArrayList<String>());
        }
    }
}

我的问题是-如果我在初始化块中放入for循环,则声明一个ArrayList对象并将其放入映射中,它不会引用同一对象吗?

//initialization block for all columns present in ColumnName Enum.
    {
        for (ColumnName c: ITERABLE_COLUMN_NAMES) {
            ArrayList<String> a = new ArrayList<>();
            columnHolder.put(c, a);
        }
    }

1 个答案:

答案 0 :(得分:0)

在for循环中,每次都会创建一个全新的ArrayList<String>,因此它不会引用同一ArrayList<String>对象。

在您的代码中,如果您已经在columnHolder中拥有一个名为abc的密钥,并且您正试图以相同的名称put另一个ArrayList,它将被覆盖ArrayList中具有该名称的前一个columnHolder。地图就是这样做的。