转换ArrayList的数组语法

时间:2014-05-05 03:25:55

标签: 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;
}

这相当于

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

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

2 个答案:

答案 0 :(得分:6)

除了您在int[]传递,而ArrayList绑定到任何对象之外,这两种方法实际上是等效的。< / p>

虽然,第二种形式可以大大简化,因为ArrayList方便copy constructor for collections。您也可以take a sublist传入列表,使其成为一个单行程序,完成与迭代部分相同的操作。

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

答案 1 :(得分:1)

近。它几乎是一个通用版本,我想你想要

// Use the List interface(s).
public static <T> List<T> leftHalf(List<T> list) { // NOTE: generic type <T> after static, 
                                                   // but before List<T>
  int sizeLeft = list.size()/2;
  List<T> left = new ArrayList<T>(sizeLeft);
  for(int i = 0; i < sizeLeft; i++) {
    left.add(list.get(i));
  }
  return left;
}

您的int[]仍然不等同于List<Integer>甚至Integer[],但它们可能有类似的行为。特别是因为ArrayList由数组支持,在这种情况下,您可以显式返回或接受ArrayList