如果我有:
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在大小和容量等方面具有不同的属性。转换是否正确?
答案 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
。