两个数组拼接成一个新数组
把2个数组合并为一个数组有四种方法可以实现:
一、apache-commons
这是最简单的办法。在apache-commons中,有一个***.addall(Object[], Object[])方法,可以一行搞定:
String[] both = (String[]) ***.addall(first, second);
其它的都需要自己调用jdk中提供的方法,包装一下。
为了方便,将定义一个工具方法concat,可以把两个数组合并在一起:
static String[] concat(String[] first, String[] second) {}
为了通用,在可能的情况下,将使用泛型来定义,这样不仅String[]可以使用,其它类型的数组也可以使用:
static <T> T[] concat(T[] first, T[] second) {}
js合并两个数组当然如果jdk不支持泛型,或者用不上,可以手动把T换成String。
二、***.arraycopy()
[java] view plain copy
static String[] concat(String[] a, String[] b) {
String[] c= new String[***.length+***.length];
***.arraycopy(a, 0, c, 0, ***.length);
***.arraycopy(b, 0, c, ***.length, ***.length);
return c;
}
使用如下:
String[] both = concat(first, second);
三、***.copyof()
在java6中,有一个方法***.copyof(),是一个泛型函数。可以利用它,写出更通用的合并方法:
[java] view plain copy
public static <T> T[] concat(T[] first, T[] second) {
T[] result = ***.copyof(first, ***.length + ***.length);
***.arraycopy(second, 0, result, ***.length, ***.length);
return result;
}
如果要合并多个,可以这样写:
[java] view plain copy
public static <T> T[] concatAll(T[] first, T[]... rest) {
int totalLength = ***.length;
for (T[] array : rest) {
totalLength += ***.length;
}
T[] result = ***.copyof(first, totalLength);
int offset = ***.length;
for (T[] array : rest) {
***.arraycopy(array, 0, result, offset, ***.length);
offset += ***.length;
}
return result;
}
使用如下:
String[] both = concat(first, second);
String[] more = concat(first, second, third, fourth);
四、***.newinstance
还可以使用***.newinstance来生成数组:
[java] view plain copy
private static <T> T[] concat(T[] a, T[] b) {
final int alen = ***.length;
final int blen = ***.length;
if (alen == 0) {
return b;
}
if (blen == 0) {
return a;
}
final T[] result = (T[]) java.***.array.
newInstance(***.getcl***ss().getComponentType(), alen + blen);
***.arraycopy(a, 0, result, 0, alen);
***.arraycopy(b, 0, result, alen, blen);
return result;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。