我有以下代码:
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1");
这两个附加没有编译。那将如何正常工作?
原文由 Pentium10 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 List<String>
,例如 ArrayList<String>
。与数组不同,它是动态增长的(参见: Effective Java 2nd Edition,第 25 项:Prefer lists to arrays )。
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)
每 append
。 ArrayList
另一方面,具有 O(1)
每次操作的摊销成本。
原文由 polygenelubricants 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答1.9k 阅读
2 回答769 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
数组的大小无法修改。如果你想要一个更大的数组,你必须实例化一个新的。
更好的解决方案是使用
ArrayList
可以根据需要增长。方法ArrayList.toArray( T[] a )
如果您需要以这种形式返回您的数组。如果您需要将其转换为简单数组…
但是大多数你用数组做的事情你也可以用这个 ArrayList 做: