【问题标题】:converting double arraylist to 2 dimensional arrays in java在java中将double arraylist转换为二维数组
【发布时间】:2011-07-01 01:21:05
【问题描述】:

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

【问题讨论】:

    标签: java arrays multidimensional-array arraylist


    【解决方案1】:

    这假设您没有任何空值或任何类似的棘手问题。 这也不能保证数组的一致性(即“矩形”)

    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);
        }
    }
    

    【讨论】:

    • 是的...但是如果您将size 值缓存在final 变量中,您的代码将更高效(并且IMO 更具可读性)。
    • glowcoder,如果你能发布一个完整的例子,非常感谢
    【解决方案2】:

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

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

    导入 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);
    }
    

    这可能需要一些 @SuppressWarning("unchecked") 用于 Array.newInstance 的强制转换。

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2020-09-10
      • 2023-04-03
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多