Klasa Vector i jego zadania

0

Witam,
chciałbym zapytać się Was do czego służy klasa Vector tzn. czy jest to jakiś kontener na dane i obiekty ? A kiedy już mamy zgromadzone obiekty czy inne, to co możemy z tego robić, do czego używać ?
jestem początkujący i często spotykam się z tą klasą w różnych przykładach i wiem jak się tworzy ale nie za bardzo wiem jakie jest przeznaczenie tej klasy bo nigdy nie używałem.
Bardzo bym prosił o wytłumaczenie.

0

Klasa Vector, to kontener na obiekty dowolnego typu. Powinieneś raczej używać klas Vector<Jakaś Klasa>, np. kolekcja Vector<String> służy do przechowywania Stringów. Stosuje sie głównie wtedy gdy nie jest znany rozmiar kolekcji. Typowe metody:

Vector<String> napisy=new Vector<String>();
int rozmiar=napisy.sizre();
napisy.add("O cholera");
System.out.println(napisy.get(0));

Nie można stworzyć kolekcji typów prostych, np. Vector<int> jest błędne. Zamiast tego Vector<Integer> liczby=... i

liczby.add(4);
int n=liczby.get(0);

następuje automatyczna konwersja int =>Integer i na odwrót.

0

Dzięki za przybliżenie tematu,
będę już wiedział co z tym zrobić.
pozdrawiam.

0

A ja myślałem ze Vector nie używa się od 100 lat już (no może od javy 1.5 :P), ale jak widać całe życie się człowiek uczy. Ja bym się jednak zainteresował kolekcjami z serii List, Map czy Set ;)

0

To byłeś w błędzie. Odpowiednikiem klasy Vector jest klasa ArrayList (żadna wymieniona przez Ciebie). Niektóre klasy np. JComboBox maja konstruktor, którego argumentem jest właśnie Vector. Warto pamiętać o istnieniu tej klasy.

0

A ja głupi zawsze myślałem ze ArrayList<> implementuje interfejs List<> (Vector<> zresztą też). No cóż, może w twojej Javie jest inaczej ;)
A z tym JComboBox to akurat fakt, ale przypuszczam że wynika z historycznych zażyłości, bo w innym wypadku zamiast klasy Vector byłby tam jakiś generyczny interfejs.

0

dzięki za jeszcze lepsze przybliżenie tematu ;)

0

Vector i Hashtable są synchronizowane. Synchronizacja zwalnia działanie i jest niepożądana jeżeli nie korzystasz współbieżnie z kolekcji (no bo wtedy oczywiście synchronizacja jest niepotrzebna), ale z drugiej strony Java 1.6 posiada lock-elision i czasem powinna usunąć tą niepotrzebną synchronizację.

PS:
Chyba nie doczytałem wcześniejszych postów :P

0

No dzieki chlopaki za wyjasnienia, za pare miechów to zrozumiem;) ale ja mam bardziej przyziemne pytanie:
co program musi robić aby potrzebne były kolekcje ? Tzn. kiedy nie wiemy jakiego rozmiaru będzie nasza kolekcja ?

0

Prawie nigdy? Ot powiedzmy że piszesz Czat. Skąd wiesz ilu będzie użytkowników? Ile będzie pokoi? ;)
Powiedzmy że piszesz jakąś grę. Skąd wiesz ilu będzie graczy?
Mam wrażenie że znacznie trudniej podać przykład programu gdzie od razu wiesz ile będzie potrzebował elementów w jakiejs tablicy ;)

0

Czyli użytkownik generuje obiekty > wrzucamy do kolekcji. Obiekty generują dane > wrzucamy do tablicy.

Bo chyba tym to się różni ?

0

Że co? Nie!
Przecież obiekty też mogą generować dane o nieznanej początkowo wielkości. Powiedzmy że napisałeś program do rozwiązywania jakiejś gry logicznej. Nie wiesz np. ile elementów program będzie musiał sobie odkładać na stos, albo ile będzie elementów które program zmodyfikował w danym ruchu (bo np. chcesz mieć możliwość "cofania ruchu" i algorytm może wymagać dostępu do takiej informacji).
Prawda jest taka ze bardzo rzadko wiesz ile będziesz potrzebował elementów w jakiejś tablicy, znacznie częściej jest ci potrzebna struktura która się powiększy kiedy zajdzie taka potrzeba.

0

Generalnie tablice są używane wewnętrznie, np w kolekcjach (no bo w końcu kolekcja musi mieć coś pod spodem) typu lista, ale też np macierz, tekstura, bufor itp

Opłaca się czasem użyć tablic, gdy operujemy na sporej ilości prymitywów. W Javie nie można zrobić kolekcji typu int, trzeba zrobić kolekcję typu Integer, który jest sporo większy i trzeba do niego przechowywać dodatkowo referencje. Nie dość, że to spowalnia program (konieczność zapakowywania i rozpakowywania prymitywów) to jeszcze zwiększa kilkukrotnie zajętość pamięci.

Kolekcja ArrayList, dla przykładu, jest w zasadzie prostą nakładką na tablicę, jeżeli chcesz przechować listę obiektów (tzn referencji) o stałym rozmiarze to ta klasa jest najlepsza. W konstruktorze możesz podać initialCapacity, wtedy konstruktor utworzy tablicę pod spodem o initialCapacity elementów i uzyskasz prawie taką samą wydajność i zajętość pamięci co przy użyciu tablic (narzutu jest pewnie kilkanaście bajtów, jeżeli kolekcja ma co najmniej kilka elementów, to jest to niewielka strata), a zyskujesz kompatybilność z wszelkimi API, które oczekują kolekcji, oraz w zasadzie masz kolekcję, która jest elastyczna i możesz ją kiedyś tam zmniejszyć czy rozbudować.

0

Vector iz g00d, Vector iz w0rking 0n J2ME! Robiłem ostatnio gadżeta który miał działać na pc i na komórze więc z Vectorkiem większośc kodu była wspólna dla obu wersji. I to chyba tyle z jego zalet :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1