Показать сообщение отдельно
Старый 14.01.2015, 06:38   #20
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Смесь: Неочевидное + Оптимизация

Сообщение от MiXaeL Посмотреть сообщение
Не думаю, что очень часто возникает ситуация, когда вектор расширяется и потом не заполняется элементами. Т.е. выигрываешь в памяти не часто, а вот в скорости может быть заметный проигрыш, т.к. вектор быстрее списка, даже на операциях вставки в середину не очень больших объектов. А всё потому что кэш процессора (данные лежат последовательно в памяти).
1. если вектору не указать capacity increment (а я никогда его не указываю), то при расширении он станет в 2 раза больше. поэтому шанс не заполниться при добавлении 1 объекта - большой
2. вставка в середину. в джаве есть arrayCopy, сдвигается с его помощью, наверное поэтому шустро.
я обычно вставляю в список или удаляю через ссылку на узел (ListNode), т.е. по какому-то условию в цикле, когда у меня есть этот самый узел,
а это быстро, т.к. нужно просто переприсвоить ссылки next, prev
for (views.start(); views.hasElement(); views.next()) {
    
ViewObject v = (ViewObject)views.item();
    if(
v.id() == id) {
        
views.remove(views.node());
        break;
    }

3. как обстоят дела с кэшем в мобилках я мало представляю, наверное тоже что-то есть

Минус списка - создаётся мелочёвка в виде узлов ListNode для каждого элемента, сборщику мусора нужно будет чистить эти узлы после удаления элементов.

Igor, спасибо что напомнил про synchronized.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (14.01.2015)