我知道这可能很简单,我有一种情况需要在使用四个 for 循环(两个用于计数和删除空元素,两个用于添加元素)合并两个 String 数组或使用两个带有 ArrayList 的 for 循环之间做出决定并使用 ArrayList.toArray() 将 ArrayList 转换为数组。
在性能方面,这两种方法有什么区别吗?
编辑
由于兼容性问题,我不得不放弃使用泛型方法的 ArrayList。但这是较早的代码。
List<String> newList = new ArrayList<String>();
for (String element : array1)
{
if (element != null)
{
newList.add(element);
}
}
for (String element : array2)
{
if (element != null)
{
newList.add(element);
}
}
return newList.toArray(new String[]{});
我用一个循环编写了一个新代码,但我想我可能会在精神上杀死下一个阅读此代码的人。
String[] newArr = new String[array1.length + array2.length];
int n = 0;
for (int i = 0; i < newArr.length; i++)
{
if (i < array1.length && array1[i] != null)
{
newArr[n] = array1[i];
n++;
}
if (i >= array1.length)
{
int a = 0;
if (array1.length < array2.length)
{
a = (i - array1.length) + (array2.length - array1.length);
}
else
{
a = i - array1.length;
}
if (array2[a] != null)
{
newArr[n] = array2[a];
n++;
}
}
}
return newArr;
最后知道不需要空元素检查,所以继续使用这个简单的代码。
String[] newArr = new String[array1.length + array2.length];
System.arraycopy(array1, 0, newArr, 0, array1.length);
System.arraycopy(array2, 0, newArr, array1.length, array2.length);
return newArr;
我从下面的讨论中猜想第二种方法性能更好。