Java 如何将元素从“2d array”复制到“Arraylist”?

Java 如何将元素从“2d array”复制到“Arraylist”?,java,arrays,arraylist,Java,Arrays,Arraylist,各位,将元素从array复制到Arraylist的技术是什么 public DenseBoard(T[][] x, T fillElem){ ArrayList<ArrayList<T>> myBoard = new ArrayList<ArrayList<T>>(); for(int i = 0; i < x.length; i++){ for(int j = 0; j < x[0].len

各位,将元素从
array
复制到
Arraylist
的技术是什么

public DenseBoard(T[][] x, T fillElem){
      ArrayList<ArrayList<T>> myBoard = new ArrayList<ArrayList<T>>();
      for(int i = 0; i < x.length; i++){
          for(int j = 0; j < x[0].length; j++){
              myBoard.get(i).add(j); //<<------ getting error!
          }
      }
  }
public DenseBoard(T[]x,T fillem){
ArrayList myBoard=新的ArrayList();
对于(int i=0;imyBoard.get(i).add(j);//您需要初始化外部循环中myBoard的每个成员:

未测试的预发代码 在下一次迭代中,我们将得到类似这样的结果

myBoard.add(new ArrayList<T>);
[ [T1, T2, T3], [T4, T5, T6] ]

希望能澄清问题。

您遇到了错误,因为您正在尝试从
ArrayList
中获取一个值,但没有先插入任何值。要按照您的方式执行,以下是正确的代码:

ArrayList<ArrayList<T>> myBoard = new ArrayList<>();
for(int i = 0; i < x.length; i++){
    ArrayList<T> values = new ArrayList<>();
    for(int j = 0; j < x[0].length; j++){
        values.add(x[i][j]);
    }
    myBoard.add(values);
}
在您的情况下,将按照以下方式进行:

ArrayList<T> myBoard = new ArrayList<>();
for(T[] arr : x){
    myBoard.add(Arrays.asList(arr));
}
ArrayList myBoard=new ArrayList();
对于(T[]arr:x){
添加(Arrays.asList(arr));
}
  • 尝试使用
    菱形运算符
    使代码更具可读性
  • 不要重新发明轮子,使用至少由核心库提供的实用程序
  • 尽可能对每个
  • 语句使用
    
    受此启发

    问题是抛出错误的行假定您有
    ArrayList
    ArrayList
    ,但您尝试引用的内部元素未初始化。这应该是一个修复:

    public DenseBoard(T[][] x, T fillElem){
          ArrayList<ArrayList<T>> myBoard = new ArrayList<ArrayList<T>>();
          for(int i = 0; i < x.length; i++){
              myBoard.add(new ArrayList<T>(Arrays.asList(x[i])));
          }
          //Do something with myBoard
    }
    
    public DenseBoard(T[]x,T fillem){
    ArrayList myBoard=新的ArrayList();
    对于(int i=0;i
    你能解释一下这一行吗?
    myBoard.add(new ArrayList);
    do?,@CollinDriscollIt向myBoard添加了一个新的ArrayList。myBoard是一个T的ArrayList的ArrayList。最初它是空的。所以我们需要给它一个放置T的位置。但在这种情况下,我有一个2d数组,它是
    T[]x
    。它会导致任何问题吗?@afzalex显然不会。只需使用
    T
    代替
    Integer
    ,我就可以编辑我的帖子了。
    [ [T1, T2, T3], [T4, T5, T6] ]
    
    ArrayList<ArrayList<T>> myBoard = new ArrayList<>();
    for(int i = 0; i < x.length; i++){
        ArrayList<T> values = new ArrayList<>();
        for(int j = 0; j < x[0].length; j++){
            values.add(x[i][j]);
        }
        myBoard.add(values);
    }
    
    Arrays.asList(T...a)
    
    ArrayList<T> myBoard = new ArrayList<>();
    for(T[] arr : x){
        myBoard.add(Arrays.asList(arr));
    }
    
    new ArrayList<Item>(Arrays.asList(array))
    
    public DenseBoard(T[][] x, T fillElem){
          ArrayList<ArrayList<T>> myBoard = new ArrayList<ArrayList<T>>();
          for(int i = 0; i < x.length; i++){
              for(int j = 0; j < x[0].length; j++){
                  myBoard.get(i).add(j); //<<------ getting error!
              }
          }
      }
    
    public DenseBoard(T[][] x, T fillElem){
          ArrayList<ArrayList<T>> myBoard = new ArrayList<ArrayList<T>>();
          for(int i = 0; i < x.length; i++){
              myBoard.add(new ArrayList<T>(Arrays.asList(x[i])));
          }
          //Do something with myBoard
    }