我有以下代码:

String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");

这两个追加没有编译。这是如何正确工作的?


当前回答

你可以简单地这样做:

System.arraycopy(initialArray, 0, newArray, 0, initialArray.length);

其他回答

如果你想把数据存储在这样一个简单的数组中

String[] where = new String[10];

你想要添加一些元素,比如数字StringBuilder,这比连接字符串要有效得多。

StringBuilder phoneNumber = new StringBuilder();
phoneNumber.append("1");
phoneNumber.append("2");
where[0] = phoneNumber.toString();

这是构建字符串并将其存储到'where'数组中更好的方法。

使用List<String>,例如ArrayList<String>。它是动态增长的,不像数组(参见:Effective Java 2nd Edition, Item 25:首选列表而不是数组)。

import java.util.*;
//....

List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
System.out.println(list); // prints "[1, 2, 3]"

如果坚持使用数组,可以使用java.util.Arrays.copyOf分配一个更大的数组来容纳额外的元素。不过,这真的不是最好的解决方案。

static <T> T[] append(T[] arr, T element) {
    final int N = arr.length;
    arr = Arrays.copyOf(arr, N + 1);
    arr[N] = element;
    return arr;
}

String[] arr = { "1", "2", "3" };
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3]"
arr = append(arr, "4");
System.out.println(Arrays.toString(arr)); // prints "[1, 2, 3, 4]"

这是O(N) /追加。另一方面,ArrayList的每个操作的平摊代价是O(1)。

另请参阅

Java教程/数组 数组是一个容器对象,它包含固定数量的单一类型的值。数组的长度是在创建数组时建立的。在创建之后,它的长度是固定的。 Java教程/列表界面

它不是编译,因为数组没有名为append的函数更好,正确的方法是使用ArrayList

import java.util.ArrayList;

ArrayList where = new ArrayList<String>();

where.add(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1")
where.add(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1")

这是我写的代码!它像魔法一样有效!

public String[] AddToStringArray(String[] oldArray, String newString)
{
    String[] newArray = Arrays.copyOf(oldArray, oldArray.length+1);
    newArray[oldArray.length] = newString;
    return newArray;
}

希望你喜欢!!

正如tangens所说,数组的大小是固定的。但是你必须先实例化它,否则它将只是一个空引用。

String[] where = new String[10];

这个数组只能包含10个元素。所以一个值只能附加10次。在代码中,您正在访问一个空引用。这就是为什么它不起作用。为了有一个 动态增长的集合,使用数组列表。