23
1 Колекције у програмском језику Јава Предавач: Дражен Драшковић Контакт: [email protected] Електротехнички факултет у Београду

Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

1

Колекције

у програмском језику Јава

Предавач: Дражен Драшковић

Контакт: [email protected]

Електротехнички факултет

у Београду

Page 2: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

2

Колекције - Collection

• У уграђеном Јавином пакету java.util налази се

много веома корисних класа и интерфејса

• Јавин collections фрејмворк стандардизује начин

на који су групе објеката обрађиване од стране

програма

• Јако ефикасан

• Разне врсте колекција раде на исти начин

• Итератори, који се налазе у оквиру овог

фрејмворка стандардизује начин на који се

приступа објектима колекција

Page 3: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

3

Мапе - Maps

• Поред колекција, фрејмворк дефинише и

неколико интерфејса и класа мапа.

Мапе складиште објекте типа кључ / вредност.

• Кључ/вредност је пар који се још зове и улаз мапе

• Кључ мора бити јединствен на нивоу једне мапе

• Мапе нису део колекција, али су уско повезане са њима

• Могуће је претворити мапе у неку од колекција и даље

манипулисати са том колекцијом

• Мапе су врло корисне уколико желите да претражујете

по кључу и да вршите ажурирања и брисања елемената

Page 4: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

4

Колекције - хијерархија

Collection

Set List

SortedSet HashSet

TreeSet

ArrayList

LinkedList

LinkedHashSet

Page 5: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

5

Колекције - итератор

Iterator

ListIterator

Page 6: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

6

Пример - примена итератора

import java.util.*;

class PrimerIteratora{

public static void main(String args[]){

ArrayList<String> lista=new ArrayList<String>(); //nova lista

lista.add("Drazen"); //dodajemo objekte u listu

lista.add("Marko");

lista.add("Uros");

lista.add("Filip");

//prolazak kroz listu sa iteratorom

Iterator itr=lista.iterator();

while(itr.hasNext()){

System.out.println(itr.next());

}

}

}

Page 7: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

7

Пример - коришћење foreach

import java.util.*;

class PrimerBezIteratora{

public static void main(String args[]){

ArrayList<String> novalista=new ArrayList<String>();

novalista.add("Drazen");

novalista.add("Filip");

novalista.add("Uros");

novalista.add("Marko");

for(String asistent:novalista)

System.out.println(asistent);

}

}

Page 8: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

8

Колекције - Мапе

Map

SortedMap HashMap

TreeMap

Page 9: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

9

Колекције - Collection

• Collection је корени интерфејс за колекције.

Обезбеђује разне методе за рад са колекцијама.

• Додаје нови елемент/е у колекцију

boolean add(Object obj)

boolean addAll(Collection c)

• Узима објекат/те из колекције

boolean remove(Object obj)

boolean removeAll(Collection c)

• Враћа итератор за ту колекцију

Iterator iterator( )

• Враћа низ који садржи све објекте колекције, објекти су

копије објеката у који се налазе у колекцији

Object[ ] toArray( )

9

Page 10: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

10

Колекције - Collection

• Све методе у интерфејсу манипулишу са

подацима типа Object.

• Како је Object надкласа свих класа у Јави,

било који објекат се може сместити у колекцију.

• Примитивни типови не могу да се сместе у колекције.

10

Page 11: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

11

Колекције - Set

• Set - Колекција у којој не постоји могућност

постојања елемената дупликата и чији се

елементи не морају чувати неким одређеним

редоследом

• SortedSet - сет чији су елементи уређени

• HashSet - конретна имплементација неуређеног сета

преко хеш табеле

• TreeSet class - имплементира сет интерфејс користећи

стабло за смештање података

• LinkedHashSet class - имплементација листе објеката

преко повезаних уноса у хеш табелу

11

Page 12: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

12

Колекције - List

• List - Колекција чији елеметни представљају

листу елемената, најчешће уређена на неки

начин

• ArrayList - имплементације која представља низове

који могу динамички да расту

• LinkedList - имплементација која представља

уланчану листу

12

Page 13: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

13

Пример са листама (1)

import java.util.*;

class Knjiga {

int id;

String naziv, autor, izdavac;

int kolicina;

public Knjiga(int id, String naziv, String autor, String izdavac,

int kolicina) {

this.id = id;

this.naziv = naziv;

this.autor = autor;

this.izdavac = izdavac;

this.kolicina = kolicina;

}

}

13

Page 14: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

14

Пример са листама (2)

public class ArrayListExample {

public static void main(String[] args) {

List<Knjiga> lista=new ArrayList<Knjiga>(); //pravimo listu knjiga

Knjiga k1=new Knjiga(101,"Na Drini cuprija","Ivo Andric","SKZ", 8);

Knjiga k2=new Knjiga(102,"Tvrdjava","Mesa Selimovic","Stubovi", 4);

Knjiga k3=new Knjiga(103,"Roman o Londonu","Milos Crnjanski","GecaKon", 6);

//dodavanje knjiga

lista.add(k1);

lista.add(k2);

lista.add(k3);

//foreach petlja

for(Knjiga k:lista){

System.out.println(k.id + “ ” + k.naziv + “ ” + k.autor + “ ” +

k.izdavac + “ ” + k.kolicina);

}

}

}

14

Page 15: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

Листа је уређена секвенца елемената

Скуп је неуређен и сваки елемент је

јединствен

15

Поређење: листе и скупови (Set)

15

Page 16: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

Сви имплементирају интерфејс List и слично се

употребљавају

Главна разлика у имплементацији и перформансама

ArrayList – имплементира листу као низ чија величина може

да се мења, па можемо дохватати елементе са методама

get/set

LinkedList – имплементира се као двоструко уланчана листа,

њене перформансе у додавању и уклањању елемената су

боље од ArrayList, али су горе у коришћењу get/set метода

Vector – сличан као ArrayList, али је синхронизован. Са друге

стране, ArrayList је бољи избор, ако желимо сигуран програм

са нитима (thread-safe program)

16

ArrayList vs LinkedList vs Vector (1)

16

Page 17: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

Vector и ArrayList захтевају простор са повећањем

броја елемената у структури

Vector – удвостручује величину структуре сваки пут

ArrayList – сваки пут повећава структуру за 50% своје

величине

LinkedList имплементира Queue интерфејс који има

већи број метода него ArrayList и Vector

Пример: offer(), peek(), pool() и друге

Подразумевани почетни капацитет ArrayList је веома

мали, па је добра препорука да се та структура

одмах конструише са већим почетним капацитетом.

То може да избегне непотребни трошак за промену

величине структуре.

17

ArrayList vs LinkedList vs Vector (2)

17

Page 18: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

18

ArrayList vs LinkedList (3)

ArrayList alst = new ArrayList();

alst.add(3);

alst.add(2);

alst.add(1);

alst.add(4);

alst.add(5);

alst.add(6);

alst.add(6);

Iterator iter1 = alst.iterator();

while(iter1.hasNext()){

System.out.println(iter1.next());

}

LinkedList llst = new LinkedList();

llst.add(3);

llst.add(2);

llst.add(1);

llst.add(4);

llst.add(5);

llst.add(6);

llst.add(6);

Iterator iter2 = llst.iterator();

while(iter2.hasNext()){

System.out.println(iter2.next());

}

Да ли се види разлика у коришћењу?

А у начину рада имплементације?

18

Page 19: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

19

ArrayList vs LinkedList – перформансе

ArrayList LinkedList

Дохватање елем.:

get()O(1) O(n)

Дохватање новог:

add()O(1)

O(1)

amortized

Уклањање елемента:

remove()O(n) O(n)

ArrayList LinkedList

1 543 352 85 085 551

13 265 642 9 550 057

199 961 301 85 768 810

LinkedList – бржи за операције add и remove,

али доста спорији у операцији get

Избор шта користити: у зависности од комплексности

структуре

LinkedList одабрати када немамо велики број

приступа елементу и када имамо велики број

операција add / remove

Пример главних операција (time [ns])

19

Page 20: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

20

Итератор - Iterator

• Iterator омогућава итерирање кроз колекције

• Враћа да ли постоји следећи елемент за итерирање

boolean hasNext ( )

• Враћа наредни елемент у итерацији

Object next ( )

• Уклања елемент који је итератор вратио као последњи,

користи се после позива методе next()

Object remove ( )

• Умеће објекат у листу испред елемента који ће бити

враћен следећим позивом next()

void add (Object obj)

20

Page 21: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

21

Мапе - Maps

• Maps не наслеђује интерфејс као и остале колекције, због разлога што мапе складиште елементе као пар кључ / вредност (улаз)• Враћа да ли мапа има вредност под задатим кључем

boolean containsKey (Object key)

• Враћа да ли мапа садржи одређену вредностboolean containsValue (Object value)

• Враћа вредност која се налази под задатим кључемObject get (Object key)

• Складишти елемент у мапу, преписујући елемент који је можда постојао под тим кључем, уколико кључ није постоја пре тога враћа null у супротном објекат који је био под кључемObject put (Object key, Object value)void putAll (Map map) - убацивање мапе у мапу

21

Page 22: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

22

Мапе - Maps

• Методе интерфејса Maps• Уклања објекат који се налази под кључем к

Object remove (Object k)

• Враћа број елемената у мапиint size ( )

• Конкретне имплементације HashMap, TreeMap• HashMap - класа која имплементира мап интерфејс

преко хаш табеле

• TreeMap - класа која имплементира интерфејс помоћу стабла, гарантује сортирање по узлазној вредности кључа, кључеви морају имплементирати Comparableинтерфејс (обезбеђује методу за компарацију)

22

Page 23: Колекције у програмском језику Јаваrti.etf.bg.ac.rs/rti/ir4pia/materijali/lab/lab_jsf/JavineKolekcije_PIA.pdf · 3 Мапе - Maps • Поред колекција,

23

Мапе - Пример

import java.util.*;

class MapPrimer{

public static void main(String args[]){

Map<Integer,String> nastavnici =

new HashMap<Integer,String>();

nastavnici.put(4000,"Bosko");

nastavnici.put(4001,"Drazen");

nastavnici.put(4002,"Sanja");

for(Map.Entry m:nastavnici.entrySet()){

System.out.println(m.getKey()+" "+m.getValue());

}

}

}Entry подинтерфејс од Map. Користимо Map.Entry у петљи да дохватимо

елементе помоћу getKey() и getValue().

23