如何将新元素添加到数组?

我有以下代码:

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

这两个附录不是编译的。 这将如何正确工作?

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

更好的解决scheme是使用一个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 ); 

使用一个List<String> ,比如一个ArrayList<String> 。 与数组不同,它是dynamic可增长的(请参见: Effective Java第2版,第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来分配一个更大的数组来容纳附加元素。 不过,这并不是最好的解决scheme。

 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]" 

这是每个append O(N) 。 另一方面, ArrayList具有O(1)每次操作的摊销成本。

也可以看看

  • Java教程/数组
    • 数组是一个容器对象,它拥有固定数量的单个types的值。 创build数组时创build数组的长度。 创build后,其长度是固定的。
  • Java教程/列表界面

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

 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); 

数组中没有方法append() 。 相反,已经build议一个List对象可以服务dynamic插入元素的需要,例如。

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

或者如果你真的热衷于使用数组:

 String[] where = new String[]{ ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", ContactsContract.Contacts.IN_VISIBLE_GROUP + "=1" }; 

但是这是一个固定的大小,没有元素可以添加。

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

 String[] where = new String[10]; 

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

您需要使用collections列表。 您不能重新维度数组。

 String[] source = new String[] { "a", "b", "c", "d" }; String[] destination = new String[source.length + 2]; destination[0] = "/bin/sh"; destination[1] = "-c"; System.arraycopy(source, 0, destination, 2, source.length); for (String parts : destination) { System.out.println(parts); } 

将新项目添加到string数组。

 String[] myArray = new String[] {"x", "y"}; // Convert array to list List<String> listFromArray = Arrays.asList(myArray); // Create new list, because, List to Array always returns a fixed-size list backed by the specified array. List<String> tempList = new ArrayList<String>(listFromArray); tempList.add("z"); //Convert list back to array String[] tempArray = new String[tempList.size()]; myArray = tempList.toArray(tempArray); 

我没有在Java中经验丰富,但我总是被告知数组是具有预定义大小的静态结构。 您必须使用ArrayList或Vector或其他任何dynamic结构。

如果你想像这样以简单的数组存储你的数据

 String[] where = new String[10]; 

你想添加一些元素,像数字,请我们StringBuilder这是比连接string更有效率。

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

这是更好的方法来build立你的string,并将其存储到你的'where'数组中。

您可以创build一个数组列表,并使用Collection.addAll()将string数组转换为您的数组列表

数组的大小不能修改。 如果你必须使用一个数组,你可以使用System.arraycopy(src,srcpos,dest,destpos,length);

你可以简单地做到这一点:

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

Apache Commons Lang有

 T[] t = ArrayUtils.add( initialArray, newitem ); 

它会返回一个新的数组,但如果由于某种原因您真的在使用数组,那么这可能是实现这个目标的理想方法。

我已经做了这个代码! 它就像一个魅力!

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

我希望你喜欢它!!

如果真的想调整一个数组的大小,你可以这样做:

 String[] arr = {"a", "b", "c"}; System.out.println(Arrays.toString(arr)); // Output is: [a, b, c] arr = Arrays.copyOf(arr, 10); // new size will be 10 elements arr[3] = "d"; arr[4] = "e"; arr[5] = "f"; System.out.println(Arrays.toString(arr)); // Output is: [a, b, c, d, e, f, null, null, null, null]