问题

我有以下代码:

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

这两个附件没有编译。这怎么会正常工作?


#1 热门回答(327 赞)

无法修改数组的大小。如果你想要一个更大的数组,你必须实例化一个新的数组。

更好的解决方案是使用可以根据需要增长的ArrayList。方法ArrayList.toArray( T[] a )允许你在此表单中需要时备份数组。

List<String> where = new ArrayList<String>();
where.add( ContactsContract.Contacts.HAS_PHONE_NUMBER+"=1" );
where.add( ContactsContract.Contacts.IN_VISIBLE_GROUP+"=1" );

如果你需要将它转换为一个简单的数组......

String[] simpleArray = new String[ where.size() ];
where.toArray( simpleArray );

但是你用数组做的大多数事情也可以用这个ArrayList做:

// iterate over the array
for( String oneItem : where ) {
    ...
}

// get specific items
where.get( 1 );

#2 热门回答(87 赞)

使用aList<String>,例如anArrayList<String>。与数组不同,它是可动态增长的(参见:Effective Java 2nd Edition,Item 25:Prefer list 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)perappend.ArrayList,每次操作的成本为O(1)

也可以看看

  • Java教程/数组数组是一个容器对象,它包含固定数量的单一类型的值。创建数组时,将建立数组的长度。创建后,其长度是固定的。
  • Java Tutorials / List接口

#3 热门回答(15 赞)

还有另一个选项,我在这里没有看到,并且不涉及"复杂"的对象或集合。

String[] array1 = new String[]{"one", "two"};
String[] array2 = new String[]{"three"};
String[] array = new String[array1.length + array2.length];
System.arraycopy(array1, 0, array, 0, array1.length);
System.arraycopy(array2, 0, array, array1.length, array2.length);

原文链接