ArrayList более эффективен, чем Vector, потому что он не синхронизирован.
Для повышения эффективности вы можете начать с приличной начальной емкости.См. Конструктор:
ArrayList(int initialCapacity)
Я думаю, что по умолчанию установлено значение только 16, хотя вам, возможно, понадобится гораздо больший размер.
Несмотря на то, что кажется, ArrayList очень эффективен даже примиллионная запись! Я написал небольшую тестовую программу, которая добавляет миллионную запись в ArrayList, не объявляя начальную емкость, и на моем 5-летнем ноутбуке с Linux (процессор Core 2 T5200) требуется всего около 100 миллисекунд.заполнить весь список.Если я объявляю начальный интервал в 1 миллион байт, это занимает около 60-80 мс, но если я объявляю 10000 элементов, это может занимать около 130-160 мс, поэтому, возможно, лучше не объявлять что-либо, если вы не можете сделать правильное предположение о месте
Что касается использования памяти, она занимает около 8 Мб памяти, что я считаю абсолютно разумным, если только вы не пишете программное обеспечение для телефона.
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.obliquid.util.StopWatch;
public class ArrayListTest {
public static void main(String args[]) {
System.out.println("tot=" + Runtime.getRuntime().totalMemory()
+ " free=" + Runtime.getRuntime().freeMemory());
StopWatch watch = new StopWatch();
List<Byte> bytes = new ArrayList<Byte>();
for (int i = 0; i < 1000000; i++) {
bytes.add((byte) (i % 256 - 128));
}
System.out.println("Elapsed: "
+ watch.computeElapsedMillisSeconds());
System.out.println("tot=" + Runtime.getRuntime().totalMemory()
+ " free=" + Runtime.getRuntime().freeMemory());
}
}
Как и ожидалось, Vectorработает немного хуже в диапазоне 160-200 мс.
Пример вывода без указания начального размера и с реализацией ArrayList.
tot=31522816 free=31023176
Elapsed: 74
tot=31522816 free=22537648