boolean hasNext()
E next()
void remove()
Co jsou kontejnery?
každý prvek v nich uložený má svou pozici (číselný index),
prvek lze do množiny vložit nejvýš jedenkrát
v kontejneru jsou dvojice (klíč, hodnota),
Kategorie jsou dány tím, které rozhraní příslušný kontejner implementuje. Základní jsou:
lineární struktura, každý prvek má svůj číselný index (pozici)
struktura bez duplicitních hodnot a obecně také bez uspořádání, umožňuje rychlé dotazování na přítomnost prvku
struktura uchovávající dvojice (klíč→hodnota), rychlý přístup přes klíč
boolean hasNext()
E next()
void remove()
Některé operace je vhodné provádět nikoli postupně po prvcích, ale jedním voláním vhodné metody:
přidá do c1 všechny prvky z c2
vrátí true, právě když c1 obsahuje všechny prvky z c2, tzn. když c1 je její nadmnožinou
odstraní z c1 všechny prvky, které jsou současně v c2.
odstraní z kolekce všechny prvky, které splňují predikát (podmínku) filter [až od Java 8]
zachová v c1 jen ty prvky, které jsou současně v c2.
Výsledek spuštění dema CollectionsDemo.java
List implemented as java.util.ArrayList test done:
add 100000 elements took 12 ms
remove all elements from last to first took 5 ms
add at 0 of 100000 elements took 1025 ms
remove all elements from 0 took 1014 ms
add at random position of 100000 elements took 483 ms
remove all elements at random position took 462 ms
List implemented as java.util.LinkedList test done:
add 100000 elements took 8 ms
remove all elements from last to first took 9 ms
add at 0 of 100000 elements took 18 ms
remove all elements from 0 took 10 ms
add at random position of 100000 elements took 34504 ms
remove all elements at random position took 36867 ms
// declaring and creating list
List<String> ls = new ArrayList<>();
// using method add
ls.add("Ahoj");
ls.add("Cheers");
ls.add("Nazdar");
// using method get
System.out.println(ls.get(0));
// using "add" at specified index
ls.add(0, "Bye");
System.out.println(ls.get(0));
System.out.println("Whole list:");
// using index
for(int i = 0; i < ls.size(); i++) {
System.out.println(i + ". " + ls.get(i));
}
System.out.println("Whole list without indices:");
// using for-each
for(String s: ls) {
System.out.println(s);
}
Z datových struktur máme v Javě ještě např.:
třída Stack, struktura "LIFO" s operacemi
třída Queue, struktura "FIFO" s operacemi
třída Deque (čteme "deck")
Cílem množin je mít možnost rychle (se složitostí O(log(n))) provádět atomické operace:
Standardní implementace množiny:
Uspořádání je dáno buďto:
Výsledek spuštění dema CollectionsDemo.java
Set implemented as java.util.HashSet test done:
add 100000 elements took 27 ms
remove all elements from 100000 to 0 took 14 ms
add 100000 elements took 9 ms
remove all elements from 0 took 18 ms
add 100000 random elements took 30 ms
remove 100000 random elements took 17 ms
Set implemented as java.util.TreeSet test done:
add 100000 elements took 67 ms
remove all elements from 100000 to 0 took 50 ms
add 100000 elements took 58 ms
remove all elements from 0 took 41 ms
add 100000 random elements took 84 ms
remove 100000 random elements took 68 ms
Příklad:
Set<String> strings = ...
for(String s: strings) {
System.out.println(s);
}
Základními metodami jsou:
Mapy mají podobné implementace jako množiny, tj.:
Složitost základních operací (put, remove, containsKey):
Nabízí škálu užitečných metod pro práci s kontejnery, jako např.:
Existují tyto starší typy kontejnerů (za → uvádíme náhradu):
Roli iterátoru plnil dříve výčet (Enumeration) se dvěma metodami:
/