Vector vs. ArrayList
2010. Április 1.
Ki használ manapság Vektort? Szerintem senki. Mégis állásinterviewkon gyakran felteszik a kérdést, hogy mi a különbség a Vektor és az ArrayList között? Erre persze mindenki azt válaszolja, hogy a Vektor az szinkronizált, az ArrayList viszont nem.
Részletesebben: http://geekexplains.blogspot.com/2008/05/difference-between-vector-and-arraylist.html
Csak hogy össze legyen foglalva kicsit:
Vektor:
- egy olyan tömb aminek mérete az elemszámtól függően nő/csökken.
- Az elemeket indexekkel érjük el.
- Az első JDK verzió óta létezik.
- Áttervezték, a Java 2 Platformtól implementálja a List Interface-t.
- Kiterjeszti az AbstractList class-t. Implementálja a Cloneable, Collection, List, RandomAccess, Serializable interfaceket.
- Az vektor iterátora “fail-fast” jellegű: ha a vektor struktúrája változik (bármilyen iterátor biztosította módon kívül), akkor ConcurrentModificationException-t kapunk. (Elbukik és gyorsan, nem valami non-determinisztikus viselkedéssel…)
- A vektor enumerátora viszont nem “fail-fast” jellegű.
ArrayList:
- Szintén egy átméretezhető 1 dimenziós tömb.
- A Java 1.2-es verzióban jelent meg.
- Az AbstractList-ből származik. Implementált interface-ek: Cloneable, Collection, List, RandomAccess, Serializable.
- n db elem hozzáadása O(n) ideig tart (tehát egy elem hozzáadása konstans idő).
- Nem szinkronizált. Ha több szállal szeretnénk használni egyszerre, akkor szinkronizálnunk kell (Ha nem tesszük, könnyen kaphatunk IndexOutOfBoundsException-t).
- List synchronizedArrayList = Collections.synchronizedList(new ArrayList(…));
- Mivel nem szinkronizált, gyorsabb mint a Vektor.
