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
);
}
}
|
Вивід на екран елементів
| |
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 використовується тільки при роботі з колекціями та контейнерами. У ньому неявно використовується ітератор, але ми бачимо вже отриманий елемент.
Оператор 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)
|