arrays Java自定义arrayMerge函数
我正在尝试使用我在Google上找到的自定义函数合并2个int数组:
public static <T> T[] arrayMerge(T[]... arrays)
{
int count = 0;
for (T[] array : arrays) count += array.length;
T[] mergedArray = (T[]) Array.newInstance(arrays[0][0].getClass(),count);
int start = 0;
for (T[] array : arrays) {
System.arraycopy(array, 0, mergedArray, start, array.length);
start += array.length;
}
return (T[]) mergedArray;
}
但我无法理解这个函数需要什么参数。我希望它能像arrayMerge(int[],int[])一样工作,但Eclipse告诉我它不接受这些参数。 我无法通过谷歌搜索大写字母t来找到答案
你可以在表格或阅读材料中回答,但是使用这个函数合并两个int数组的例子就很好了(它是否消除了重复项,如果没有,我怎样才能实现呢?)
# 1 楼答案
这种语法被称为varargs——这意味着它将接受任意数量的该类型参数。删除泛型以简化解释,方法定义如下:
可以这样称呼:
这就像是一个简写:
但不那么难看
在您的示例中,数组是一个类型化的泛型数组——在调用它之前,您不知道元素类型是什么
# 2 楼答案
该方法采用任意数量的数组,所有数组都具有相同的类型:
然而,由于泛型在Java中的工作方式,您无法传递基元类型的数组(例如
int[]
)# 3 楼答案
您在这里发布的代码不仅适用于
int
任何类型的数组,而且适用于合并2个以上的数组。(无限制)T
代表泛型类型。见Generics in Java只能使用
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src
源数组李>srcPos
源数组中的起始位置李>dest
目标数组李>destPos
目标数据中的起始位置李>length
要复制的数组元素数李>首先制作一个长度与两个数组相同的数组
然后用
System.arraycopy
将第一个数组x
复制到0
的merged
中并用
System.arraycopy
将第二个数组y
复制到x.length
处的merged
但它不能消除重复项
如果没有重复项,可以使用Set。但我们必须与
Integer
而不是int
合作。所以我们必须转换成
Integer
返回到int
。比如: