代码之家  ›  专栏  ›  技术社区  ›  Embid123

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

  •  -1
  • Embid123  · 技术社区  · 7 年前

    我正在开发一个简单的程序,它从一个文件中读取数据并将其放入一个容器中,该容器被定义为一个映射,每个列包含一个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 回复  |  直到 7 年前
        1
  •  0
  •   Mark    7 年前

    在for循环中,您正在创建一个全新的 ArrayList<String> 每次,所以它不会引用相同的 阵列列表<字符串> 对象。

    如果您已经有了 columnHolder abc 你在试图 put ArrayList 在同一个名称下,它将覆盖上一个 阵列列表 柱固定器