У меня есть следующий код:
String[] where;
where.append(ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1");
where.append(ContactsContract.Contacts.IN_VISIBLE_GROUP + "=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 );
Используйте
List<String>
, напримерArrayList<String>
. Он динамически расширяется, в отличие от массивов (см. Effective Java 2nd Edition, Item 25: Prefer list для массивов ).Если вы настаиваете на использовании массивов, вы можете использовать,
java.util.Arrays.copyOf
чтобы выделить больший массив для размещения дополнительного элемента. Это действительно не лучшее решение, хотя.Это
O(N)
заappend
.ArrayList
с другой стороны,O(1)
амортизировалась стоимость одной операции.Смотрите также
источник
ArrayList
делает внутренне.Apache Commons Lang имеет
он возвращает новый массив, но если вы по какой-то причине действительно работаете с массивами, это может быть идеальным способом сделать это.
источник
Есть еще один вариант, который я здесь не видел и который не включает «сложные» объекты или коллекции.
источник
На
append()
массивах нет метода . Вместо этого, как уже предлагалось, объект List может обслуживать необходимость динамической вставки элементов, например.Или, если вы действительно хотите использовать массив:
но тогда это фиксированный размер, и никакие элементы не могут быть добавлены.
источник
Как сказал тангенс, размер массива фиксирован. Но вы должны сначала создать его экземпляр, иначе это будет только нулевая ссылка.
Этот массив может содержать только 10 элементов. Таким образом, вы можете добавить значение только 10 раз. В вашем коде вы получаете нулевую ссылку. Вот почему это не работает. Чтобы иметь динамически растущую коллекцию, используйте ArrayList.
источник
источник
Я сделал этот код! Работает как часы!
Я надеюсь тебе это понравится!!
источник
Вам нужно использовать список сбора. Вы не можете изменить размер массива.
источник
Если вы хотите хранить ваши данные в простом массиве, как это
и вы хотите добавить к нему некоторые элементы, такие как числа, пожалуйста, используйте StringBuilder, который намного эффективнее, чем объединение строк.
Это гораздо лучший метод для построения вашей строки и сохранения ее в вашем массиве 'where'.
источник
Добавление новых элементов в массив String.
источник
<code>
тег, и у него были проблемы с общими типами. Пожалуйста, старайтесь избегать этого тега, поскольку ... у него есть проблемы, и сделайте отступ в вашем коде с 4 пробелами, чтобы получить правильное форматирование. Я сделал это для вашего вопроса :).Есть много способов добавить элемент в массив. Вы можете использовать временную схему
List
для управления элементом, а затем преобразовать его обратноArray
или использоватьjava.util.Arrays.copyOf
и комбинировать его с обобщениями для получения лучших результатов.Этот пример покажет вам, как:
Чтобы использовать этот метод, вам просто нужно вызвать его так:
Если вы хотите объединить два массива, вы можете изменить предыдущий метод следующим образом:
Теперь вы можете вызвать метод следующим образом:
Как я уже говорил, вы также можете использовать
List
объекты. Тем не менее, потребуется немного взломать, чтобы привести его в безопасное состояние следующим образом:Теперь вы можете вызвать метод следующим образом:
источник
newArray[elements.length] = element;
ты имел ввидуnewArray[elements.length - 1] = element;
?Я не настолько опытен в Java, но мне всегда говорили, что массивы - это статические структуры, которые имеют предопределенный размер. Вы должны использовать ArrayList или Vector или любую другую динамическую структуру.
источник
вы можете создать массив и использовать
Collection.addAll()
для преобразования массива строк в ваш списокисточник
Вы можете просто сделать это:
источник
Если вы действительно хотите изменить размер массива, вы можете сделать что-то вроде этого:
источник
Размер массива не может быть изменен. Если вам нужно использовать массив, вы можете использовать:
источник
Также возможно предварительно выделить достаточно большой объем памяти. Вот простая реализация стека: программа должна выводить 3 и 5.
источник