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