java.util.Vector-alternatywy

Wcześniej zawsze myślałem, że wektor jest dobry do użycia dla obiektów nieopisanych, gdy długość nie jest znana. Z tego co mi wiadomo to też myślałem że jest bezpieczny dla wątków

Co by to zmieniło Vector nie powinno być już używane, a jaka jest alternatywa?

Author: Ravindra babu, 2009-11-24

5 answers

Należy użyć ArrayList zamiast Vector. Vector zastosowano wewnętrzną synchronizację, ale rzadko jest to wystarczająco dobre dla rzeczywistej spójności i tylko spowalnia wykonanie, gdy nie jest naprawdę potrzebne.

Zobacz także to pytanie o stackoverflow .

 37
Author: Paul Wagland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:11

Możesz zamiast tego użyć ArrayList.

Jeśli potrzebujesz zsynchronizowanej wersji, możesz zrobić coś takiego:

ArrayList arrayList = new ArrayList();

List synchList = Collections.synchronizedList(arrayList);
 14
Author: hexium,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 18:59:10

ArrayList jest teraz lepszą klasą do użycia. Vector jest teraz uważany za dziedzictwo i ma dodatkowy narzut wydajności, aby być bezpiecznym dla wątków.

 7
Author: Kyle Rozendo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 18:57:02

Użyj ArrayList, gdy potrzebujesz implementacji List, ale nie potrzebujesz bezpieczeństwa wątku, i użyj CopyOnWriteArrayList, Gdy potrzebujesz implementacji List, która jest bezpieczna dla wątku.

 7
Author: Dónal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-17 10:58:17

Vector jest klasą legacy collection z Javy 1.0. W Javie 1.2 (dawno temu!), dodano framework Collections framework, który zawierał nowe klasy kolekcji, takie jak ArrayList i HashMap, które miały zastąpić starsze klasy Vector i Hashtable.

Jak już wspomniano wcześniej, klasy starszych kolekcji miały wbudowaną synchronizację, która jest niepotrzebna w wielu aplikacjach. Synchronizacja ma narzut wydajności, więc jeśli nie jest to konieczne, nie należy używać to.

W niektórych przypadkach (gdy twój program jest wielowątkowy i wiele wątków ma dostęp do tych samych danych) musisz zsynchronizować swoje kolekcje. Niektórzy ludzie będą wtedy używać starych klas Vector lub Hashtable, ale lepszym sposobem jest użycie wrappera synchronizacji z na przykład ArrayList:

// Your standard, unsynchronized list
List<String> data = new ArrayList<String>();

// Use this to put it into a synchronization wrapper
List<String> syncedData = Collections.synchronizedList(data);

Zobacz dokumentację API Collections.synchronizedList() (i innych metod), aby uzyskać więcej informacji.

 5
Author: Jesper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-25 08:37:04