我正在研究一个简单的程序,该程序从文件中读取数据并将其放入定义为包含每个列的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);
}
}
答案 0 :(得分:0)
在for循环中,每次都会创建一个全新的ArrayList<String>
,因此它不会引用同一ArrayList<String>
对象。
在您的代码中,如果您已经在columnHolder
中拥有一个名为abc
的密钥,并且您正试图以相同的名称put
另一个ArrayList
,它将被覆盖ArrayList
中具有该名称的前一个columnHolder
。地图就是这样做的。