Java 如何向数组添加新元素?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2843366/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 13:31:33  来源:igfitidea点击:

How to add new elements to an array?

javaarraysstring

提问by Pentium10

I have the following code:

我有以下代码:

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

Those two appends are not compiling. How would that work correctly?

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

采纳答案by tangens

The size of an array can't be modified. If you want a bigger array you have to instantiate a new one.

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

A better solution would be to use an ArrayListwhich can grow as you need it. The method ArrayList.toArray( T[] a )gives you back your array if you need it in this form.

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

If you need to convert it to a simple array...

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

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

But most things you do with an array you can do with this ArrayList, too:

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

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

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

回答by polygenelubricants

Use a List<String>, such as an ArrayList<String>. It's dynamically growable, unlike arrays (see: Effective Java 2nd Edition, Item 25: Prefer lists to arrays).

使用List<String>,例如ArrayList<String>。它是动态增长的,与数组不同(参见:Effective Java 2nd Edition,Item 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]"

If you insist on using arrays, you can use java.util.Arrays.copyOfto allocate a bigger array to accomodate the additional element. This is really not the best solution, though.

如果你坚持使用数组,你可以使用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]"

This is O(N)per append. ArrayList, on the other hand, has O(1)amortized cost per operation.

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

See also

也可以看看

回答by Simon

As tangens said, the size of an array is fixed. But you have to instantiate it first, else it will be only a null reference.

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

String[] where = new String[10];

This array can contain only 10 elements. So you can append a value only 10 times. In your code you're accessing a null reference. That's why it doesnt work. In order to have a dynamically growing collection, use the ArrayList.

此数组只能包含 10 个元素。因此,您只能附加一个值 10 次。在您的代码中,您正在访问一个空引用。这就是为什么它不起作用。为了拥有动态增长的集合,请使用 ArrayList。

回答by npinti

I'm not that experienced in Java but I have always been told that arrays are static structures that have a predefined size. You have to use an ArrayList or a Vector or any other dynamic structure.

我在 Java 方面经验不多,但我一直被告知数组是具有预定义大小的静态结构。您必须使用 ArrayList 或 Vector 或任何其他动态结构。

回答by Paligulus

You need to use a Collection List. You cannot re-dimension an array.

您需要使用集合列表。您不能重新调整数组的尺寸。

回答by Robert

There is no method append()on arrays. Instead as already suggested a List object can service the need for dynamically inserting elements eg.

append()数组没有方法。相反,正如已经建议的那样,List 对象可以满足动态插入元素的需要,例如。

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

Or if you are really keen to use an array:

或者,如果您真的很想使用数组:

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

but then this is a fixed size and no elements can be added.

但这是一个固定大小,不能添加任何元素。

回答by RMachnik

If you would like to store your data in simple array like this

如果您想将数据存储在这样的简单数组中

String[] where = new String[10];

and you want to add some elements to it like numbers please us StringBuilder which is much more efficient than concatenating string.

并且您想向其中添加一些元素,例如数字,请使用 StringBuilder,这比连接字符串更有效。

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

This is much better method to build your string and store it into your 'where' array.

这是构建字符串并将其存储到“where”数组中的更好方法。

回答by ratzip

you can create a arraylist, and use Collection.addAll()to convert the string array to your arraylist

您可以创建一个Collection.addAll()数组列表,并用于将字符串数组转换为您的数组列表

回答by Jiao

Size of array cannot be modified. If you have to use an array, you can use:

数组的大小不能修改。如果必须使用数组,可以使用:

System.arraycopy(src, srcpos, dest, destpos, length); 

回答by dforce

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