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?
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 .
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);
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.
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.
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.
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