Sobes.tech
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.