转换ArrrayList的数组语法

use*_*965 0 java

如果我有:

public static int[] leftHalf(int[] array) 
{
    int size1 = array.length / 2;
    int[] left = new int[size1];
    for (int i = 0; i < size1; i++) {
        left[i] = array[i];
    }
    return left;
}
Run Code Online (Sandbox Code Playgroud)

这相当于

public static ArrayList<T> leftHalf(ArrayList<T> list) 
{
    int sizeLeft = list.size()/2;
    ArrayList<T> left = new ArrayList<T>(sizeLeft);
    for(int i=0; i<sizeLeft; i++)
    {
        left.add(list.get(i));
    }
    return left;
}
Run Code Online (Sandbox Code Playgroud)

我认为添加部分是棘手的,因为ArrayList在大小和容量等方面具有不同的属性.转换是否正确?

Mak*_*oto 6

除了你传入的东西int[],并且ArrayList绑定到任何对象之外,这两种方法实际上是等价的.

虽然,第二种形式可以大大简化,因为ArrayList有一个方便的集合复制构造函数.您也可以获取传入列表的子列表,使其成为一个单行程序,完成与迭代部分相同的操作.

public static <T> List<T> leftHalf(List<T> list) {
    return new ArrayList<T>(list.subList(0, list.size() / 2));
}
Run Code Online (Sandbox Code Playgroud)