LINUX.ORG.RU

Ответ на: комментарий от Legioner

Работает, спасибо. А как добавить новый элемент в конец массива? Так

int a=numbers.length;

numbers[a]=«four»;



не получается, однако

numbers[a-1]=«four»;


успешно заменяет последний элемент массива.

tr0ll ()
Ответ на: комментарий от tr0ll

Двухтомник Core Java Хорстманна и Корнела 8-е издание. Есть в переводе на русский ЕМНИП называется Java 2. (Том 1: Основы, Том 2: Тонкости программирования). Оригинал можно найти в электронном виде.

Begemoth ★★★★★ ()

Жабокодеры такие жабокодеры! Учи матчасть!

anonymous ()
Ответ на: комментарий от tr0ll

Длина массива после его создания не может меняться. Выделяете новый, размером на 1 больше, копируете туда предыдущий и добавляете последнее значение. Либо используете другой тип данных.

Legioner ★★★★★ ()
Ответ на: комментарий от Legioner

Выделяете новый, размером на 1 больше, копируете туда предыдущий и добавляете последнее значение.

Хорошая шутка.

Begemoth ★★★★★ ()
Ответ на: комментарий от Legioner

В чём я не прав? Каким ещё образом в джаве можно изменить размер выделенного массива?

Я о том, что увеличиние зарезервированного места на 1 элемент - не лучший вариант, экспоненциальный рост массива посоветовал бы.

ЗЫ: А потом ещё удивляются почему программы на Java такие тормозные.

Begemoth ★★★★★ ()
Ответ на: комментарий от Begemoth

Это всё очевидные оптимизации (реализованные в JDK в классах типа ArrayList, про что я и написал в своём посте).

Legioner ★★★★★ ()

Нет. Ну можно было прочитать ник пользователя и на этом разговор закончить. Козе понятно, что он сам знает ответы на свои глупые вопросы.

pathfinder ★★★ ()
Ответ на: комментарий от Legioner

А мне показалось, что ты шаришь в яве...

        String[] arr = {"a","b","c"};
        arr = Arrays.copyOf(arr, arr.length+1);
        System.out.print(arr.length);

В принципе тут происходит всё, что и описано в твоём после, но так будет работать гораздо быстрее и надёжнее.

qnikst ★★★★★ ()
Ответ на: комментарий от qnikst

Это то же самое, что

String[] arr2 = new String[arr.length + 1];
System.arraycopy(arr, 0, arr2, 0, arr.length);
arr = arr2;
Работать твой код быстрее не будет (можешь посмотреть реализацию Arrays.copyOf, скорее немножко медленнее, т.к. там массив создаётся через reflection.

Legioner ★★★★★ ()
Ответ на: комментарий от Legioner

Хм, пора бы посмотреть в сторону Java. Что-то меня в нем цепляет.

Insomnium ★★★★ ()
Ответ на: комментарий от KRoN73

Vector(если нужен threadsafe) или LinkedList( если не нужен) тогда уж.

ArrayList внутри содержит обычный массив со всеми его бонусами и проблемами, так, что бонусов по сравнению с создать новый и скопировать туда всё может и не оказаться.

qnikst ★★★★★ ()
Ответ на: комментарий от Legioner

если счиать, что JIT нету, и не работать с типами, для которых нет reflection (Integer, Double, etc..), то ты прав.

qnikst ★★★★★ ()
Ответ на: комментарий от qnikst

>так, что бонусов по сравнению с создать новый и скопировать туда всё может и не оказаться.

Окажутся :) Просто фактически ArrayList - самый популярный вид списка.

А так, если производительность на чтении нужна - то тогда http://javolution.org/target/site/apidocs/javolution/util/FastList.html рулит. А вот если типовой шаблон - «один раз составить, один раз проитерировать», то с ArrayList они где-то на одном уровне.

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

всё таки по частому добавлению/удалению элементов LinkedList будет _гораздо_ быстрее ArrayList, а доступ к i-тому элементу у ArrayList лучше и равняется доступу к эл-ту в массиве.

про fastlist не знаю посмотрю.

qnikst ★★★★★ ()
Ответ на: комментарий от qnikst

с линкедлит ошибся, его только если в начало удалять добавлять использовать хорошо.

qnikst ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.