Java Arrays.copyOf

标签 java arrays

我只想将“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/

相关文章:

java - 使用循环从字符数组列表中删除重复项?

java - 与用于 Selenium 对象模式设计的 Robot 框架的关键字管理集成

java - 将字节参数传递给重载方法

java - ANT 不在 <target> 中运行任何东西

c++ - 使用数组和某些方法来 memcpy struct 是否安全?

javascript - 数组的性能包括与映射到对象并在 JavaScript 中访问它

java - 如何获取两个列表之间的差异作为转换序列?

ios - 将数组转换为 SwiftyJSON

javascript - 放入后数组元素丢失 .innerHTML = ""

javascript - 如何对具有相同键的对象值求和并返回一个对象?