在java中将双arraylist转换为2维数组

时间:2011-02-21 05:06:55

标签: java arrays multidimensional-array arraylist

假设我有一个ArrayList<ArrayList<E>>形式的arraylist ...将这个转换为二维数组的最优雅方法是什么

2 个答案:

答案 0 :(得分:2)

这假设您没有任何空值或类似的任何棘手。 这也不能保证阵列的均匀性(即“矩形”)

final int listSize = list.size();
E[][] darr = new E[listSize][];
for(int i = 0; i < listSize; i++) {
    ArrayList<E> sublist = list.get(i);
    final int sublistSize = sublist.size();
    darr[i] = new E[sublistSize];
    for(int j = 0; j < sublistSize; j++) {
        darr[i][j] = sublist.get(j);
    }
}

答案 1 :(得分:0)

如果E是一个泛型类,我们就会遇到一个问题,就是不能创建没有反射的泛型数组,而使用Reflection我们需要类对象(或一个示例数组对象)。

我不确定这是“优雅的”,但让我们试试:

import java.lang.reflect.Array;

<E> public static E[][] toArray(List<List<E>> list, Class<E> elementType) {
    E[] sample = (E[])Array.newInstance(elementType, 0);
    List<E[]> tempList = new ArrayList<E[]>(list.size());
    for(List<E> subList : list) {
       tempList.add( subList.toArray(sample));
    }
    E[][] finalSample = (E[][])Array.newInstance(sample.getClass(), 0)
    return tempList.toArray(finalSample);
}

对于Array.newInstance中的强制转换,可能需要一些@SuppressWarning("unchecked")