1. Контейнери и колекции
Контейнерите or колекциите са класове, които ви позволяват да съхранявате и обработвате няколко обекта наведнъж. Вече познавате два вида контейнери: масиви и списъци.
Java има няколко десетки колекции, всяка от които съхранява елементи по свой специфичен начин. Ето няколко от тях:
колекция | Клас | Описание |
---|---|---|
|
|
списък |
|
Свързан списък | |
|
вектор | |
|
Стек | |
|
|
Комплект |
|
||
|
||
|
|
Опашка |
|
||
|
|
Карта/Речник |
|
||
|
Тук имената са малко двусмислени. В повечето езици за програмиране всички тези структури от данни се наричат колекции, но не и в Java. В Java някои от тези класове реализират интерфейса Collection
, докато други не.
Съответно колекциите се разделят на колекции в широк смисъл и колекции в тесен смисъл (само тези, които имплементират Collection
интерфейса).
Така че, за да избегнем объркване, когато говорим за колекции , имаме предвид в тесния смисъл на думата, т.е. класове, които имплементират интерфейса Collection
. Всички типове и са List
колекции . Колекциите в широк смисъл обикновено се наричат контейнери . Те включват типове като и масиви.Set
Queue
Map
2. HashSet
колекция
Класът HashSet
е типична колекция от комплекти. В много отношения той е подобен на ArrayList
класа. В някои отношения това е по-примитивна version.
Можете да създадете HashSet
обект, като използвате израз като:
HashSet<Type> name = new HashSet<Type>();
Къде Type
е типът на елементите, които ще съхраняваме в HashSet
колекцията.
Класът HashSet
има методи като този:
Метод | Описание |
---|---|
|
Добавя value елемента към колекцията |
|
Премахва value елемента от колекцията. Връща, true ако е имало такъв елемент |
|
Проверява дали колекцията има value елемент |
|
Изчиства колекцията, като премахва всички елементи |
|
Връща броя на елементите в колекцията |
Ето пример за използване на набор.
Нека напишем програма, която казва сбогом на потребителя, ако той or тя каже здравей. За да стане по-интересно, ще дадем на нашата програма възможността да разбира „здравей“ на няколко езика.
Код | Забележка |
---|---|
|
Създайте HashSet обект, който съхранява String елементи. Добавяме поздрави на различни езици към set променливата. Прочетете ред от конзолата. Ако низът е в нашия набор от поздрави, тогава се сбогуваме. |
3. Комплект
Колекцията Set
е проектирана да съдържа набор от елементи. Ето защо се нарича Set
(комплект). Тази колекция има три функции.
Операции върху множество
Има само три неща, които можете да направите с набор: да добавите елементи към набора, да премахнете елементи от набора и да проверите дали наборът съдържа определен елемент. Това е.
Без ред
Елементите в тази колекция нямат индекси. Не можете да получите елемент чрез индекс or да запишете стойност в колекция на конкретен индекс. Наборът няма методи get()
и set()
.
Уникални елементи
Всички елементи в комплекта са уникални. За разлика от списъка, наборът може да съдържа само едно копие на елемент. Обектът or е в комплекта, or не — трета опция няма. Не можете да добавите черно три пъти към набор от цветове. Или го има, or го няма.
Намиране на елементи
Когато добавите нов елемент, премахнете елемент or проверите дали елемент съществува в набор, търсенето на елемента се извършва в метода. Преданият елемент се сравнява с елементите на колекцията първо от hashCode()
, а след това, ако стойностите, върнати от hashCode()
съвпадат, от equals()
.
4. Сравняване на колекции: List
vsSet
Нека сравним два вида колекции: List
и Set
Ще разгледаме основните разлики, когато едната е по-изгодна от другата и обратното.
Нека се опитаме да сравним List и Set, използвайки играчки като пример.
Колекцията List
(списък) е като набор от играчки, подредени по стената в стая за игри. Можете да добавите играчка в края на списъка. Ако наистина трябва, можете също да го поставите в средата (но някои от съществуващите играчки ще трябва да бъдат преместени).
Всяка играчка има индекс. Можете да посочите играчка по нейния индекс и също да замените играчка номер 7 с играчка номер 13. Можете да премахнете играчка номер 4 от списъка. Накрая можете да научите индекса на всяка играчка в списъка.
Колекцията Set
(комплект) е по-скоро като купчина играчки в средата на пода. Можете да добавите играчка към купчината и можете да премахнете играчка от купчината. Но тези играчки нямат фиксиран индекс, свързан с тях.
Или да предположим, че избирате играчка за рождения ден на вашето дете. Първо мислите дали той вече има играчката. Всички играчки, които той вече има, образуват набор от играчки, които няма да изберете да купите.
От тази гледна точка можете да видите, че редът на играчките в набор от „вече съществуващи играчки“ няма meaning, нито дали рожденикът има два екземпляра от определена играчка. Не се интересувате от реда or номера на всяка играчка. Това, което ви интересува, е да знаете всяка уникална играчка, която съществува в комплекта.
За случаи като този се нуждаете от Set
колекцията. Най-популярната му реализация е HashSet
класът.