如何向数组添加新元素?

新手上路,请多包涵

我有以下代码:

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

这两个附加没有编译。那将如何正常工作?

原文由 Pentium10 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 611
2 个回答

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

更好的解决方案是使用 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 );

原文由 tangens 发布,翻译遵循 CC BY-SA 3.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)appendArrayList 另一方面,具有 O(1) 每次操作的摊销成本。

也可以看看

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

原文由 polygenelubricants 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题