Lista wszystkich kolekcji - 1

– Cześć, Amigo.

– Hej, Raszi.

– Baśka powiedziała mi, że potrzebujesz więcej przykładów z kolekcjami. Dam Ci zatem kilka. Tutaj jest lista kolekcji i interfejsów:

Interfejs Klasa/implementacja Opis
List  ArrayList  List
 LinkedList  List
 Wektor  Wektor
 Stos  Stos
 Set    HashSet  Set
 TreeSet  Set
 SortedSet  Sortowany set
Map  HashMap Map/słownik
 TreeMap  Map/słownik
 SortedMap  Sortowany słownik
 Hashtable  Hash-table (pl. tablica mieszająca)

– Hmm. Sporo tego. Cztery Listy, trzy Sety i cztery Mapy.

– Tak, wszystkie one są innymi implementacjami interfejsów List, Set i Map.

– Jaka jest różnica między tymi implementacjami?

– To dokładnie to, o czym będziemy dzisiaj rozmawiać. Bądź cierpliwy.

– Czy masz jeszcze jakieś pytania?

– Wiem, jak wyświetlić listę na ekranie. Jak wyświetlić Set albo Map?

– Elementy w List są uporządkowane, więc możesz użyć indeksu, aby je wyświetlić. Set i Map nie mają konkretnego porządku. W zasadzie, porządek ich elementów może ulec zmianie, kiedy nowe pozycje zostaną dodane lub usunięte.

– Niesamowite.

– To dlatego powstały specjalne obiekty nazywane iteratorami, by móc pracować z elementami kolekcji. Pozwalają Ci przejść przez wszystkie elementy w kolekcji, nawet jeśli mają jedynie nazwy zamiast wskaźników (Map) lub nie mają ani nazw, ani wskaźników (Set).

– Oto kilka przykładów:

Wyświetl elementy zawarte w Set
 public static void main(String[] args)
{
    Set<String> set = new HashSet<String>();
    set.add("Deszczyk");
    set.add("w");
    set.add("Hiszpanii");

     // Deklaruje iterator dla setu
     Iterator<String> iterator = set.iterator();

    while (iterator.hasNext())        // Sprawdza istnienie kolejnego elementu
    {
       // Sprawdza bieżący element i przechodzi do następnego
       String tekst = iterator.next();

        System.out.println(tekst);
    }
}
 
Wyświetl elementy zawarte w List
public static void main(String[] args)
{
    List<String> lista = new ArrayList<String>();
    lista.add("Deszczyk");
    lista.add("w");
    lista.add("Hiszpanii");

    Iterator<String> iterator = lista.iterator();// // Deklaruje iterator dla listy

    while (iterator.hasNext())        // Sprawdza istnienie kolejnego elementu   
    {
        // Sprawdza bieżący element i przechodzi do następnego
        String tekst = iterator.next();

        System.out.println(tekst);
    }
}
Wyświetl elementy zawarte w Map
public static void main(String[] args)
{
    // Wszystkie elementy są przechowywane w parach
    Map<String, String> mapa = new HashMap<String, String>();
    mapa.put("pierwszy", "deszczyk");
    mapa.put("drugi", "w");
    mapa.put("trzeci", "Hiszpanii");

    Iterator<Map.Entry<String, String>> iterator = mapa.entrySet().iterator();

   while (iterator.hasNext())
    {
        // Sprawdza parę klucz-wartość
        Map.Entry<String, String> para = iterator.next();
        String klucz = para.getKey();            // Klucz
        String wartosc = para.getValue();        // Wartość
        System.out.println(klucz + ":" + wartosc);
    }
}

– Wow. Zastanawiam się, co to wszystko znaczy.

– Właściwie to dość proste. Najpierw ładujemy z kolekcji specjalny obiekt: iterator. Iterator ma tylko dwie metody.

1. Metoda next() zwraca kolejny element w kolekcji.

2. Metoda hasNext() sprawdza, czy istnieją wciąż elementy, które nie zostały zwrócone przez next().

– OK. Wydaje mi się, że trochę się to rozjaśniło. Pozwól, że powtórzę Ci to, co zrozumiałem.

– Zatem... Najpierw musimy wywołać metodę iterator() na kolekcji, by pobrać ten magiczny obiekt iterator.

– Następnie sprawdzamy wszystkie elementy po kolei tak długo, aż nie zostanie już żaden do sprawdzenia. Pobieramy kolejny element w kolekcji poprzez wywołanie next() i sprawdzamy, czy są wciąż jakieś elementy w kolekcji, wywołując hasNext() na iteratorze. Zgadza się?

– Tak, mniej więcej. Ale zaczekaj na najlepszą część.

– Java posiada skrótową notację do pracy z iteratorami. Podążając za wzorem while i for, dodano kolejne specjalne twierdzenie: for each. Wskazuje na nie również słowo kluczowe for.

– Pętla for-each jest używana jedynie do pracy z kolekcjami i kontenerami. Domyślnie używa ona iteratora, ale widzimy tylko zwracany element.

– Pozwól, że pokażę Ci dłuższy oraz krótszy sposób na pracę z iteratorem:

Dłuższy sposób
public static void main(String[] args)
{
  Set<String> set = new HashSet<String>();
    set.add("Deszczyk");
    set.add("w");
    set.add("Hiszpanii");

    Iterator<String> iterator = set.iterator();
  while (iterator.hasNext())
  {
    String tekst = iterator.next();
    System.out.println(tekst);
  }
}
Krótszy
public static void main(String[] args)
{
    Set<String> set = new HashSet<String>();
    set.add("Deszczyk");
    set.add("w");
    set.add("Hiszpanii");

   for (String tekst : set)   
    {
        System.out.println(tekst);
    }
}


– Zauważ, że słowa podświetlone na czerwono lub zielono są nieobecne w prawej części. W istocie trzy linie są zastąpione przez jedną.

Dłuższy sposób
Iterator<String> iterator = set.iterator();
while (iterator.hasNext())
{
    String tekst = iterator.next();
Krótszy

for (String tekst : set)


– Świetnie to wygląda. Ten sposób bardziej mi się podoba.

– Spójrzmy na skróconą wersję powyższych przykładów:

Wyświetl elementy zawarte w Set
public static void main(String[] args)
{
    Set<String> set = new HashSet<String>();
    set.add("Deszczyk");
    set.add("w");
    set.add("Hiszpanii");

    for (String tekst : set)   
    {
        System.out.println(tekst);
    }
}
Wyświetl elementy zawarte w List
public static void main(String[] args)
{
    List<String> lista = new ArrayList<String>();
    lista.add("Deszczyk");
    lista.add("w");
    lista.add("Hiszpanii");

     for (String tekst : lista)        
    {
        System.out.println(tekst);
    }
}
Wyświetl elementy zawarte w Map
public static void main(String[] args)
{
    Map<String, String> mapa = new HashMap<String, String>(); 
    mapa.put("pierwszy", "deszczyk");
    mapa.put("drugi", "w");
    mapa.put("trzeci", "Hiszpanii");

    for (Map.Entry<String, String> para : mapa.entrySet())
    {
        String klucz = para.getKey();                      // Klucz
        String wartosc = para.getValue();        // Wartość
        System.out.println(klucz + ":" + wartosc);
    }
}

– Teraz to rozumiem!

– Cieszę się, że Ci się podoba.