Сообщение от 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.