Middle
Miért lett hozzáadva az ArrayList, ha a Vector már létezett?
sobes.tech MI
Válasz az MI-től
Az ArrayList hozzáadása a Vector után azzal magyarázható, hogy egy korlátlanul bővíthető tömbre volt szükség, amely optimalizált egyszálú környezetben való működésre. A Vector szinkronizált, ami további zárolási költségeket jelent még akkor is, ha nem történik több szálú hozzáférés.
Fő különbségek:
| Jellemző | Vector | ArrayList |
|---|---|---|
| Szinkronizáció | Szinkronizált (szálbiztos). | Nem szinkronizált (nem szálbiztos). |
| Teljesítmény | Alacsonyabb a szinkronizációs költségek miatt. | Magasabb egyszálú forgatókönyvekben. |
| Méretváltoztatás | A méret megkétszereződik. | A méret 50%-kal nő. |
| Öröklés | AbstractList, RandomAccess, Cloneable, Serializable. |
AbstractList, RandomAccess, Cloneable, Serializable. |
Példa az ArrayList használatára jobb teljesítmény érdekében egyszálú környezetben:
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>(); // ArrayList használata
names.add("Alice");
names.add("Bob");
for (String name : names) {
System.out.println(name);
}
}
}
Többszálas forgatókönyvekben előnyösebb a szinkronizált Vector használata vagy az ArrayList körül csomagolt szinkronizált lista a Collections.synchronizedList() segítségével:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SynchronizedListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
List<String> synchronizedNames = Collections.synchronizedList(names); // ArrayList csomagolása
// Most a `synchronizedNames` szálbiztos
synchronizedNames.add("Charlie");
}
}
Így az ArrayList hozzáadásra került, mint hatékonyabb alternatíva a Vector-hoz egyszálú programokban, ahol nem szükséges a szinkronizációs költség.