Вопрос-ответ

How to add new elements to an array?

Как добавить новые элементы в массив?

У меня есть следующий код:

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

Эти два добавления не компилируются. Как это будет работать правильно?

Переведено автоматически
Ответ 1

Размер массива изменить нельзя. Если вам нужен массив большего размера, вам придется создать новый экземпляр.

Лучшим решением было бы использовать 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

Используйте a List<String>, например an ArrayList<String> . В отличие от массивов, он может динамически расширяться (см.: Эффективное издание Java 2nd, пункт 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 для выделения большего массива для размещения дополнительного элемента. Однако это действительно не лучшее решение.

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) за append. ArrayList, с другой стороны, имеет O(1) амортизированную стоимость за операцию.

Смотрите также

Ответ 3

Apache Commons Lang имеет

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

он возвращает новый массив, но если вы по какой-то причине действительно работаете с массивами, это может быть идеальным способом сделать это.

Ответ 4

Есть еще один вариант, который я здесь не видел и который не включает "сложные" объекты или коллекции.

String[] array1 = new String[]{"one", "two"};
String[] array2 = new String[]{"three"};

// declare a new array with enough space for all elements
String[] combinedArray = new String[array1.length + array2.length];

// copy the separate arrays into the combined array
System.arraycopy(array1, 0, combinedArray, 0, array1.length);
System.arraycopy(array2, 0, combinedArray, array1.length, array2.length);
java arrays string