Назад Зміст Вперед

4.1. Створення, побудова та ініціалізація одно- та багатовимірних масивів примітивних та об’єктних змінних

Колекціями/контейнерами в Java прийнято називати класи, основна мета яких - зберігати набір інших елементів. Приклад такого класу - це ArrayList.
Java колекції діляться на три основні групи:

Set - множина,

List - список,

Map - словник (або карта).

Set. Багато туфель скинутих в купу - це Set - множина. У set можна додати елемент, пошукати його або видалити. Але у set-елементів немає строго заданого порядку!
А тепер уявіть ту ж купу взуття, але виставлену уздовж стінки. Тепер в ній з'явився порядок. У кожного елемента є його номер. І можна просто взяти «пару номер 3» за її номером. Це - List - список. Ми можемо додати елемент в початок списку або всередину, або прибрати його, і зробити це просто за його номером.
Уявіть ту ж купу взуття, але тепер у кожної пари є табличка з ім'ям «Коля», «Вася», «Аня». Це Map, (його ще часто називають «карта» або «словник»). У кожного елемента є його унікальна назва, за якою до нього можна звертатися. Унікальну назву елемента ще називають «ключем». А Map - це набір пар «ключ» - «значення». Ключ не обов'язково повинен бути рядком, він може бути будь-яким типом. Map, у якого тип ключа - Integer, - це фактично List (з деякими відмінностями).

У бібліотеці колекцій Java існує два базових інтерфейси, реалізації яких і представляють сукупність всіх класів колекцій:


1. Collection - колекція містить набір об'єктів (елементів). Тут визначено основні методи для маніпуляції з даними, такі як вставка (add, addAll), видалення ( remove, removeAll, clear ), пошук ( contains )
2. Map - описує колекцію, що складається з пар "ключ - значення". У кожного ключа тільки одне значення, що відповідає математичному поняттю однозначної функції або відображення (тар). Таку колекцію часто називають ще dictionary або асоціативним масивом (associative array). Ніяк НЕ відноситься до інтерфейсу Collection і є самостійним.
Хоча фреймворк називається Java Collections Framework, інтерфейс map і його реалізації входять в фреймворк теж!

Інтерфейси Collection і Map є базовими, але вони не є єдиними. Їх розширюють інші інтерфейси, що додають додатковий функціонал.

Список всіх колекцій та інтерфейсів


Інтерфейс
Клас / Реалізація
Опис
List
ArrayList
Перелік
LinkedList
Перелік
Vector
Вектор
Stack
Стек
Set
HashSet
Множина
TreeSet
Множина
SortedSet
Відсортована множина
Map
HashMap
Карта / Словник
TreeMap
Карта / Словник
SortedMap
Відсортований словник
Hashtable
Хеш-таблиця

У елементів списку (List) є чітко заданий порядок, тому їх можна вивести просто за номером.У Set і Map строго заданого порядку елементів немає. Власне кажучи, порядок їх елементів може змінюватися при видаленні або додаванні якогось елементу.
Тому для роботи з елементами колекцій були придумані спеціальні об'єкти - ітератори. З їх допомогою можна пройтися по всіх елементах колекції, навіть якщо у них немає номера, а тільки імена (Map), або взагалі немає імен - Set.

Вивід на екран елементів Set
public static void main (String [] args)
{
    Set <String> set = new HashSet <String> ();
     set.add ( "Mama");
     set.add ( "Mila");
     set.add ( "Ramu");
    // отримання ітератора для безлічі
    Iterator <String> iterator = set .iterator ();

    while ( iterator.hasNext ())         // перевірка, чи є ще елементи  
    {
        // отримання поточного елемента і перехід на наступний
        String text = iterator.next ();
        System.out.println ( text );
    }
}

Вивід на екран елементів List
public static void main (String [] args)
{
    List <String> list = new ArrayList <String> ();
     list.add ( "Mama");
     list.add ( "Mila");
     list.add ( "Ramu");
    Iterator <String> iterator = list .iterator (); // отримання ітератора для списку
    while ( iterator.hasNext ())       // перевірка, чи є ще елементи  
    {
        // отримання поточного елемента і перехід на наступний
        String text = iterator.next ();
        System.out.println ( text );
    }
}

Вивід на екран елементів Map
public static void main (String [] args)
{
    // всі елементи зберігаються в парах
    Map <String, String> map = new HashMap <String, String> ();
     map.put ( "first", "Mama");
     map.put ( "second", "Mila") ;
     map.put ( "third", "Ramu");

    Iterator < Map.Entry <String, String> > iterator = map .entrySet (). Iterator ();
    while ( iterator . hasNext ())
    {
        // отримання «пари» елементів
        Map.Entry <String, String>  pair = iterator . next ();
        String key = pair .getKey ();             // ключ
        String value = pair .getValue ();         // значення
        System.out.println ( key + ":" + value );
    }
}
У Java є скорочений запис роботи з ітераторами. За аналогією з while, for був доданий ще один спеціальний оператор «for each» - «для кожного». Позначається теж ключовим словом for.
Оператор for-each використовується тільки при роботі з колекціями та контейнерами. У ньому неявно використовується ітератор, але ми бачимо вже отриманий елемент.
довгий запис
скорочений запис
public static void main (String [] args)
{
 Set <String> set = new HashSet <String> ();
   set.add ("Mama");
   set.add ("Mila");
   set.add ("Ramu");
 Iterator <String> iterator = set.iterator();
   while ( iterator.HasNext())
  {
    String text = iterator.Next();
    System.out.println (text);
  }
}
public static void main (String [] args)
{
   Set <String> set = new HashSet <String> ();
     set.add ("Mama");
     set.add ("Mila");
     set.add ("Ramu");
    for ( String text:set )  
    {
        System.out.println ( text );
    }
}
Отже, 
довгий запис
скорочений запис
Iterator <String> iterator = set.iterator ();
 while (iterator.HasNext())
{
    String text = iterator.Next ();
for (String text:set)
.