"Cześć, Amigo!"
"Cześć, Ellie!"
„Dzisiaj raz na zawsze zastanowimy się nad strukturą kolekcji”.
– Długo na to czekałem.
„Wiesz już, czym są kolekcje i wiesz, jak z nimi pracować. Czas uporządkować swoją wiedzę w ścisły system. Wtedy wiele pytań „dlaczego” i „jak” zniknie, a większość rzeczy stanie się oczywista”.
„ Interfejsy kolekcji . Struktura dziedziczenia interfejsów kolekcji wygląda mniej więcej tak:”
Zauważ dwie rzeczy.
Po pierwsze, wszystko, co tu widzisz, to interfejs.
Po drugie, strzałki oznaczają „dziedziczy”.
„Innymi słowy, lista, zestaw i kolejka dziedziczą kolekcję, ale mapa nie?”
„Tak. Klasy abstrakcyjne dziedziczą te interfejsy, a z kolei implementacje, o których wiesz, dziedziczą te klasy abstrakcyjne: ArrayList, Hashtable, TreeSet… ”
"Masz rację."
„Zobaczmy teraz, do czego służą metody tych interfejsów:”
Metody interfejsu Iterable<E> ::
Metody | Opis |
---|---|
Iterator<T> iterator(); |
Zwraca obiekt iteratora. |
– To nie wydaje się wystarczające.
„Cóż, tyle ich jest. To wszystko dla iteratorów. Nie będziemy ich teraz omawiać, ale wkrótce omówimy je szczegółowo”.
Metody kolekcji <E>: interfejs:
Metody | Opis |
---|---|
boolean add(E e); |
Dodaje element do kolekcji |
boolean addAll(Collection<? extends E> c); |
Dodaje elementy do kolekcji |
void clear(); |
Usuwa wszystkie elementy z kolekcji |
boolean contains(Object o); |
Sprawdza, czy kolekcja zawiera element. |
boolean containsAll(Collection<?> c); |
Sprawdza, czy kolekcja zawiera elementy. |
boolean equals(Object o); |
Sprawdza, czy kolekcje są równoważne |
int hashCode(); |
Zwraca kod skrótu |
boolean isEmpty(); |
Sprawdza, czy kolekcja jest pusta. |
Iterator<E> iterator(); |
Zwraca obiekt iteratora |
boolean remove(Object o); |
Usuwa element z kolekcji |
boolean removeAll(Collection<?> c); |
Usuwa elementy z kolekcji |
boolean retainAll(Collection<?> c); |
Usuwa wszystkie elementy, których nie ma w c |
int size(); |
Zwraca rozmiar kolekcji |
Object[] toArray(); |
Konwertuje kolekcję na tablicę |
<T> T[] toArray(T[] a); |
Konwertuje kolekcję na tablicę |
„Jestem tu już solidny we wszystkim. Użyłem połowy z tych metod i spotkałem drugą połowę”.
– Świetnie, w takim razie kontynuujmy.
Metody interfejsu List<E>::
Metody | Opis |
---|---|
void add(int index, E element); |
Dodaje elementy do środka kolekcji |
boolean addAll(int index, Collection<? extends E> c); |
Dodaje elementy do kolekcji |
E get(int index); |
Zwraca element według indeksu |
int indexOf(Object o); |
Zwraca indeks (liczbę) elementu |
int lastIndexOf(Object o); |
Zwraca indeks ostatniego elementu. |
ListIterator<E> listIterator(); |
Zwraca iterator dla listy |
ListIterator<E> listIterator(int index); |
Zwraca iterator dla listy |
E remove(int index); |
Usuwa element według jego indeksu |
E set(int index, E element); |
Ustawia nową wartość według indeksu |
List<E> subList(int fromIndex, int toIndex); |
Zwraca podkolekcję |
„Tu też nie ma nic radykalnie nowego. O kolekcjach wiem już prawie wszystko, z czego nie mogę się nie cieszyć”.
„Cóż, myślę, że mogę znaleźć coś, co cię zaskoczy. Ale kontynuujmy badanie interfejsów:”
Metody interfejsu Set<E> ::
Metody | Opis |
---|---|
|
„Interfejs Set nie ma żadnych nowych metod — tylko te, które dziedziczy”.
„Tak, widziałem, że interfejs Interable również nie miał niczego.
„Z drugiej strony, mniej metod oznacza mniej do zapamiętania!”
„Twój afirmujący życie optymizm sprawia, że jestem szczęśliwy”.
„Interfejs Set jest dziedziczony przez dwa interfejsy z metodami: SortedSet i NavigableSet. Ale nie będę ich omawiał, bo nigdy nie skończymy”.
„Zamiast tego pozwólcie, że przedstawię ogólny obraz klas i interfejsów opisujących kolekcje w Javie”.
„Przynieś to”.
„Więc trzymaj się mocno:”
"Wow, to jest ogromne!"
„Cóż, to nie jest takie duże. Pamiętaj też, że klasy abstrakcyjne są całkowicie opcjonalne. Ale dobrze jest pamiętać, która klasa implementuje które interfejsy. To może się dość często przydać”.
„Och, chciałbym również zauważyć, że niektóre kolekcje są uważane za przestarzałe”.
— Które to są?
„Mówię o klasach Vector, Stack, Dictionary i Hashtable. Są to zsynchronizowane (bezpieczne wątkowo) wersje zwykłych kolekcji”.
„Ale Java dodała specjalną bibliotekę współbieżności z wieloma kolekcjami, do których nie tylko można uzyskać dostęp z innych wątków, ale także mają znacznie wydajniejszą implementację. ConcurrentHashMap jest znacznie wydajniejszy niż Hashtable ”.
„Możesz używać kolekcji Vector, Stack, Dictionary i Hashtable, ale nie jest to zalecane”.
– Rozumiem, będę o tym pamiętał.
— Dzięki, Ellie!
GO TO FULL VERSION