Учитель diego

10 тысяч удалений и вставок

  • 5
  • Недоступна
Повторение однообразных действий без нытья и катанья — вот чем славны компьютеры, вот чего помогают избегать программисты простым смертным! Не будь средств автоматизации повторений, условие этой задачи звучало бы как приговор. А так вроде бы все нормально: для arrayList и linkedList провести 10 тысяч вставок, удалений, а также вызовов get и set.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (110)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Валихан10 уровень, Санкт-Петербург
28 августа, 06:39
Привет, друзья! Порадовала задачка 10 000 удалений и вставок )). Показывает, что мыслить шаблонно бывает очень вредно )). Весь сыр бор в "remove10000" : тут делаем все то же самое, что и в "insert10000", только наоборот. В цикле "for" идем с конца к началу (от 9999 к 0) и соответственно итерация минус минус. Вот и вся соль ))
Roman Metelov9 уровень, Киев
1 сентября, 09:29
или можно удалять каждый раз первый в списке элемент (с индексом 0)
Wladyslaw22 уровень, Warsaw
15 июня, 15:57
AL INSERT 2 AL GET 1 AL SET 1 AL REMOVE 10 LL INSERT 2 LL GET 111 LL SET 118 LL REMOVE 53 Как-то ЛинкедЛист не очень смотрится
fedor20 уровень, Москва
2 апреля, 09:07
ArrayList<Integer> - нелинейная зависимость от объема. 10к - за 10-12ms 100к - 540-630ms 500к - 12.750+ms 1млн - <не дождался! не менее ТРЁХ МИНУТ> Вероятная причина: массив всегда пишется в память "одной полосой" и свободное место под это хозяйство (когда .add(элемент) - это уже новый массив ! ) - нужно еще поискать LinkedList<Integer> - тут все плохо 10к - 87-90ms 100к - 8.250 - 8.410ms 300к - 108.655ms 500к - <не дождался! не менее СЕМИ МИНУТ> 1млн - <не запускал>
Oleg Zaytsev24 уровень
24 февраля, 15:32
ArrayList arrayList = new ArrayList(); Почему не указываем тип переменной? по умолчанию Object использует?
Anastasia20 уровень, Нижний Новгород
23 февраля, 15:29
непонятно было, что именно добавлять в методах set и add. Пошла читать комменты. Оказалось - что угодно)
Oleg Zaytsev24 уровень
24 февраля, 15:32
можно добавить i
Александр8 уровень, Москва
4 марта, 15:39
разрабам жр скучно прост!
Евгений20 уровень, Днепр
15 февраля, 20:29
Если для всех операций использовать позицию
int pos = (int) (Math.random() * list.size());
if (pos > 0) pos--;
результат будет более релевантным, кмк.
y-grek15 уровень, Киев
25 декабря 2018, 15:30
думал начать ругаться, почему не проходит ремув() без аргумента, а оказалось в ЛинкдЛист он реализован. а в АррайЛисте ремув() без аргумента нет.. учим матчасть дальше..
S3R3N1TY37 уровень, Санкт-Петербург
18 декабря 2018, 15:14
Замерил время выполнения всех операций с Arraylist и linkedlist в этой задаче вышло arraylist time= 20 linkedlist time= 224
Aku24 уровень, Новосибирск
10 января, 16:44
у меня получилось 41 и 206. Отчего зависит разность времени, моего и твоего? код/комп?
Александр23 уровень, Казань
17 января, 14:56
Ну от среды выполнения. Чем мощнее, тем быстрее... А также от того, как ты свой код реализуешь - будешь ли ты его делать по умному, скажем удалять элементы remove с последнего, тогда не придется массив двигать, или добавлять элемент в конец а не в начало массива. 4, 83 (c правильным удалением с конца, и добавлением элементов в конец) И по операциям: list.add(i) 2 - 2 (при увеличение до 1М 25 - 194) list.add(0,i) 14 - 2 get 1 - 41 set 1 - 37 remove 9 - 2
for (int i = 0; i < 10000; i++) {
 list.remove(i);
}
или remove 0 - 2
for (int i = 9999; i >= 0; i--) {
 list.remove(i);
}
Никита Алиев11 уровень, Москва
17 февраля, 10:51
разве "i" верный аргумент для remove?
list.remove(i);
Александр23 уровень, Казань
18 февраля, 08:05
Возможно я неверный код предоставил. Там где мы считаем от 9999 и до 0 - то там i. А где от 0 до 10000, конечно же надо remove(0) делать. Иначе большинство удалений мы там пропустим.
Julia_Lemon8 уровень
3 апреля, 23:40
Как вы это замерили? Где можно посмотреть?
Александр23 уровень, Казань
6 мая, 07:01
Можешь вот тут прочитать https://javarush.ru/groups/posts/1935-udalenie-ehlementa-iz-spiska-arraylist У метода remove() есть две особенности. Во-первых, он не оставляет “дыр”. В нем уже реализована логика сдвига элементов при удалении элемента из середины
Alexander9 уровень, Саратов
6 июля, 20:22
ах, так вот почему ошибка времени выполнения ... Спасибо.
Alex15 уровень, Москва
15 ноября 2018, 18:37
Для удаления элементов из листа можно использовать цикл while.
Мишаня22 уровень
8 ноября 2018, 14:39
Решил проверить , что работает с какой скоростью через разницу дат создали арай Thu Nov 08 14:58:43 CET 2018 Арай закончен спустя 9 мс создали линк Thu Nov 08 14:58:43 CET 2018 линк закончен спустя 74 мс