如何将新元素添加到数组?
我有以下代码:
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]