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.
Follow

Get every new post delivered to your Inbox.