Download as pdf or txt
Download as pdf or txt
You are on page 1of 39

Јава - Колекције

Циљеви

• У овој лекције ће бити обрађено:


– Увод о колекцијама података
– Java Collections Framework
– Интерфејси
– Класа ArrayList
– Класа HashMap
– Класа Iterator
– Интерфејси Comparator/Comparable
– Преглед класа

2/39
Типови компонената

3/39
Java Collections Framework

Java Collections Framework је API који омогућава


мапирање објеката у групу са којом је лако
манипулисати независно од имплементације:
– Све се налази унутар java.util пакета
– Постоји 8 кључних интерфејса и неколико класа које
их импелемтирају:
• Collection interface: Група елемената
• Set interface: Група јединствених елемената
• List interface: Уређена група елемената
• Queue: Приоритетни редови
• Deque: Ред чекања
• Map interface: Група са јединственим кључем елемента
• SortedSet и SortedMap за сортирани Set и Map

4/39
Компоненте унутар овог фреимворка

• Collections Framework представља скуп


интерфејса и класа које служе за смештање и
манипулацију подацима.
– Кључни интерфејси се користе за манипулацију
колекцијом и за прослеђивање група између објеката.
– Имплементација представља начин за рад са
конкретним објектом који смештају колекције и који
импелентирају кључне интерфејсе.
– Алгоритми представљају делове кода који се могу
применити на већем броју места и развијени су
унутар JDK.

5/39
Кључни интерфејси

6/39
Интерфејс Collection<E>

7/39
Интерфејс Collection<E>

8/39
Интерфејс Set<E>

• Скуп представља колекцију података (Collection) код које не


постоје дупликати.
• Служи за моделовање
математичке апстракције.
• Садржи само методе наслеђене од Collection уз додато
ограничење о једиствености елемената.
• Уколико је потребно по вредностима поредити два скупа ане
не само по инстанцама потребно консултовати методе equals
и hashCode.

9/39
Интерфејс List<E>

• Листа је уређена колекција података (Collection).


Листа може да садржи дуплиране елементе на
различитим позицијама. Као додатне методе листа
има могућност да:
– Приступ одређеним позицијама на основу индекса
– Претраживање специфицираног објекта
– Итерирање, обилазак целе листе
– Преглед дела листе

10/39
Интерфејс List<E>

11/39
Интерфејс Queue<E>

• Приоритетни ред је колекција (Collection) у којој се елементи


чувају пре обраде.
• Поред основних метода поседује додатне методе за
убацивање, избацивање и проверу.

12/39
Интерфејс Queue<E>

13/39
Интерфејс Deque<E>
Deque<E>

• Приоритетни ред са уметањем на оба краја је уређена


колекција података (Collection).
• Подржава и рад стека (Stack - LIFO) и реда (Queue - FIFO).

14/39
Интерфејс Deque<E>
Deque<E>

15/39
Интерфејс Deque<E>
Deque<E>

16/39
Интерфејс Deque<E>
Deque<E>

17/39
Интерфејс Map<K,V
Map<K,V>
>

• Мапа је колекција података (Collection) која мапира


кључ у објекат.
• Кључеву унутар мапе су јединствени.
• Параметри:
– K – тип кључа који се оджава у мапи
– V – тип вредности која се мапира

18/39
Интерфејс Map<K,V
Map<K,V>
>

19/39
Класа ArrayList<E>
ArrayList<E>

• Класа ArrayList :
– Имплементира интерфејс List
– Дозвољава манипулацију на исти начин као и низови
– Променљивог капацитета, који се меза додавањем
елемената
– Креирање празне листе ArrayList:

List<Type> members = new ArrayList<Type>();

– Креирање празне листе почетне дужине:


List<Type> members = new ArrayListType>(10);

20/39
Класа ArrayList<E>
ArrayList<E>

– Креирање празне листе ArrayList чији су елементи класе


String:

List<String> members
= new ArrayList<String>();

– Креирање празне листе стрингова почетне дужине:


List<String> members
= new ArrayList<String>(10);

– Креирање листе стрингова од постојеће листе:


List<String> members
= new ArrayList<String>(list);

21/39
Манипулација са ArrayList објектима

– Додавање елемента на крај листе:

String name = “Marko Markovic";


members.add(name);

– Постављање елемента на произвољну позицију унутар


листе:
members.add(0, name);

– Избацивање елемента из листе:

members.remove(0);

22/39
Приступ елементима листе

– Дохватање првог елемента:


String s = members.get(0);

– Дохватање елемента са специфичне позиције:

String s = members.get(2);
– Тражење објекта унутар листе:

int position = members.indexOf(name);


– Дохватање дужине листе :

int size = members.size();

23/39
Класа HashMap<K,V>

• Класа HashMap:
– Имплементира интерфејс Map
– Служи са смештање објеката који захтевају
кључ
– Кључеви се обично постављају да буду типа
String

24/39
Класа HashMap<
HashMap<K,V>
K,V>

– Креирање празне мапе HashMap<K,V> :

Map<String,Integer> members
= new HashMap<String, Integer>();

– Креирање празне мапе почетне дужине:


Map<String,Integer> members
= new HashMap<String, Integer>(10);

– Креирање мапе од неке постојеће


Map<String,Integer> members
= new HashMap<String, Integer>(map);

25/39
Манипулација са HashMap објектима

– Додавање елемента у мапу:


members.put("Pera Peric", new Integer(20));

– Дохватање елемента из мапе:

Integer id = members.get("Pera Peric");

– Избацивање елемента из мапе:

members.remove("Pera Peric");

26/39
Манипулација са HashMap објектима

– Додавање свих кључева у мапу:


Set<String> keys = members.keySet();

– Дохватање свих елемента из мапе:

Collection<Integer> data = members.values();

27/39
Интерфејс Iterator<T>

• Интерфејс Iterator се користи за серијски


обилазак објеката унутар колекције. Овај
интерфејс:
– Служи за примењује објектно оријентисану
парадигму у раду са колекцијама
– Садрзи следеће методе:
• hasNext() враћа true уколико постоји још
елемената.
• next() враћа следећи елемент у колекцији.
• remove() избацује последњи дохваћени елемент.

28/39
Пројектни узорак Iterator

Collection<Type> c = ...;
// rad sa elementima unutar kolekcije
Iterator<Type> i = c.iterator();
while (i.hasNext()) {
Type t = i.next();
// obrada pojedinacnih objekata
}

29/39
Пројектни узорак Iterator

Collection<String> c = ...;
...
for(String s : c){
//rad sa lementima
}

Ово је еквивалентно са:


Collection<String> c = ...;
...
for(Iterator<String> iterator = c.iterator(); iterator.hasNext(); ){
String s = iterator.next();
}

30/39
Класе

Set List Queue Dequ Map

Hash table HashSet HashMap

Balanced tree TreeSet TreeMap

Resizable array ArrayList ArrayDeque

Linked list LinkedList LinkedList

Hash table+
LinkedHashSet LinkedHashMap
Linked list

Other PriorityQueue Properties

31/39
Поређење објеката

• Да би се омогућило сортирање елемената унутар


колекције мора се успоставити редослед измешу
елемената
• За свака два елемента унутар колекције мора се
успоставити релација поређења. Та релација
треба једнозначно да утврди:
• Да ли објекат A долази пре објекта B
• Да ли објекат B долази пре објекта A
• Да ли објекат A једнак објекту B

32/39
Поређење објеката

• Да би се ово постигло може се имплементирати


интерфејс Comparable који пореди дати елемент
са неким другим елементом
• Поређење се може остварити и уколико се
имплементира интерфејс Comparator који пореди
нека два објекта

33/39
Интерфејс Comparable<T>

• Имплементацијом интерфејса Comparable


омогућава се поређење позивајућег објекта и
прослеђеног објекта
• Метода:
– int compareTo(T e)
• Враћа негативан број, или нулу, или позитиван
број уколико је дати објекат мањи, једнак или већи
од специфицирано објекта o.

34/39
Интерфејс Comparator<T>

• Имплементацијом интерфејса Comparable


омогућава се поређење два објекта
• Методе:
– int compare(T o1, T o2)
Враћа негативан број, или нулу, или позитиван број
уколико је објекат o1 мањи, једнак или већи од
специфицирано објекта o2.
– boolean equals(Object obj)
Означава да ли је дати објекат једнак неком другом
објекту у погледу поређења објеката

35/39
Класа Collections

• Класа java.util.Collections садржи искључиво


статичке методе које раде или враћају колекције
података
• Ова класа садржи полимирфне алгоритме који
раде са колекцијама:
• binarySearch
• copy
• min and max
• replace
• reverse
• rotate
• shuffle
• sort
• swap
36/39
Класа Collections

• Пример сортирања листе:


List<String> members = new ArrayList<String>();

Collections.sort(members);

37/39
Класа Arrays

• Класа java.util.Arrays садржи искључиво статичке


методе које раде или враћају низове података
• Ова класа садржи алгоритме који раде са
низовима:
• binarySearch
• copy/copyOfRange
• equals
• fill
• sort

38/39
Питања?

You might also like