gpt4 book ai didi

Java Arrays.copyOf

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:33 24 4
gpt4 key购买 nike

我只想将“b”、“d”和“e”从 arr1 复制到 arr2,并在添加时动态增加 arr2 的大小。

我尝试添加一个if条件

 if(!arr1[i].equals("a") && !arr1[i].equals("c")) {
arr2 = Arrays.copyOf(arr1, i + incrementLength);
}

但它仍然复制从 arr1 到 arr2 的所有内容。

import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String[] arr1 = new String[] { "a", "b", "c", "d", "e" };
String[] arr2 = new String[0];
int incrementLength = 1;
for (int i = 0; i < arr1.length; i++) {
if(!arr1[i].equals("a") && !arr1[i].equals("c")) {
arr2 = Arrays.copyOf(arr1, i + incrementLength);
}
}
for (String value : arr2) {
System.out.println(value);
}
}
}

最佳答案

您代码中的 Arrays.copyOf(arr1, i + incrementLength); 在循环内创建 不必要 arr1 的多个副本。你应该避免做的事情。

看看这个Documentation from Oracle .第二个参数是 arr1 中要复制到 arr2 的元素数。

相反,您可以将所需的元素添加到 List 并从该列表中获取数组的副本。像这样:

    List<String> list = new ArrayList<>();

for (int i = 0; i < arr1.length; i++) {
if(!arr1[i].equals("a") && !arr1[i].equals("c")) {
list.add(arr[i]);
}
}

arr2 = list.toArray(new String[list.size()]);

Update

如果你不想使用列表,你可以试试这个:

    String[] arr1 = new String[] { "a", "b", "c", "d", "e" };
String[] arr2 = new String[arr1.length];
int j = 0;
int finalLength = 0;
for (int i = 0; i < arr1.length; i++) {
if(!arr1[i].equals("a") && !arr1[i].equals("c")) {
// add only elements that you need
arr2[j++] = arr1[i];
// keep track of how many elements you have added
finalLength++;
}
}

// truncate array to finalLength
String[] arr3 = Arrays.copyOf(arr2, finalLength);
for (String value : arr3) {
System.out.println(value);
}

这会生成以下输出:

    b
d
e

希望这对您有所帮助!

关于Java Arrays.copyOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41239421/

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