在Java中将多个String []合并为单个String []的最佳方法是什么?
答案 0 :(得分:4)
好吧,你可以将一个[]放在一起等于所有[]的大小,然后调用System.arraycopy
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#arraycopy(java.lang.Object,int,java.lang.Object,int,int
将每个人搬到新的大阵容。
这将是o(n),其中n是您想要组合的字符串数。
更好的问题是,您的代码是否真的如此性能至关重要,以至于您在arrayList上使用数组? ArrayList更容易使用,在大多数情况下应该在[]上使用。
答案 1 :(得分:2)
另一种可能性:
public static String[] mergeStrings(String[]...matrix){
int total = 0;
for(String[] vector : matrix){
total += vector.length;
}
String[] resp = new String[total];
for(int i=0; i< matrix.length; i++){
for(int j=0; j< matrix[i].length; j++){
resp[i*matrix.length + j] = matrix[i][j];
}
}
return resp;
}
你不能测试:
public static void main(String[] args) {
String[] resp =mergeStrings(new String[]{"1","2"}, new String[]{"3", "4", "5"});
for(String s : resp)
System.out.println(s);
}
答案 2 :(得分:2)
我建议使用System#arraycopy()
代替平台本机操作(从而产生更好的性能):
public static String[] concat(String[]... arrays) {
int length = 0;
for (String[] array : arrays) {
length += array.length;
}
String[] newArray = new String[length];
int pos = 0;
for (String[] array : arrays) {
System.arraycopy(array, 0, newArray, pos, array.length);
pos += array.length;
}
return newArray;
}
更加普遍:
public static <T> T[] concat(Class<T> type, T[]... arrays) {
int length = 0;
for (T[] array : arrays) {
length += array.length;
}
T[] newArray = (T[]) Array.newInstance(type, length);
int pos = 0;
for (T[] array : arrays) {
System.arraycopy(array, 0, newArray, pos, array.length);
pos += array.length;
}
return newArray;
}
用法示例:
String[] arr1 = { "foo1", "bar1" };
String[] arr2 = { "foo2", "bar2", "baz2" };
String[] arr3 = { "foo3" };
String[] all1 = concat(arr1, arr2, arr3);
System.out.println(Arrays.toString(all1)); // [foo1, bar1, foo2, bar2, baz2, foo3]
String[] all2 = concat(String.class, arr1, arr2, arr3);
System.out.println(Arrays.toString(all2)); // [foo1, bar1, foo2, bar2, baz2, foo3]
答案 3 :(得分:0)
使用java.util.Arrays创建一个集合,然后返回List:)
String[] moo1 = {"moo", "moo2"};
String[] moo2 = {"moo3", "moo4"};
String[] moo3 = {"moo5", "moo5"};
ArrayList<String> strings = new ArrayList<String>();
strings.addAll(Arrays.asList(moo1));
strings.addAll(Arrays.asList(moo2));
strings.addAll(Arrays.asList(moo3));
String[] array = strings.toArray(new String[0]);