gpt4 book ai didi

java - ArrayList 还是几个 for 循环?

转载 作者:行者123 更新时间:2023-12-01 23:30:27 24 4
gpt4 key购买 nike

我知道这可能很简单,我有一种情况需要决定是使用四个 for 循环(两个用于计数和删除空元素,两个用于添加元素)合并两个字符串数组还是使用两个 for 循环使用 ArrayList 并使用 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;

根据下面的讨论,我猜第二种方法是性能更好的方法。

最佳答案

假设 1 个 for 循环的时间复杂度为 O(n),则 4 个 for 循环和 2 个 for 循环的时间复杂度相同

4*O(n) = O(n)
2*O(n) = O(n)

但是使用数组而不是 ArrayList 会占用更少的内存。因此,请选择第一种选择。

关于java - ArrayList 还是几个 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19403540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com