boolean hasNext() E next() void remove()
Co jsou kontejnery?
List
)
každý prvek v nich uložený má svou pozici (číselný index),
Set
)
prvek lze do množiny vložit nejvýš jedenkrát
equals
Map
)
v kontejneru jsou dvojice (klíč, hodnota),
Integer
, Char
, Boolean
, Double
apod.
List<Person>
),
jimiž určujeme, jaké položky se do kontejneru smějí dostat.
java.util
,
Kategorie jsou dány tím, které rozhraní příslušný kontejner implementuje. Základní jsou:
List<E>
)
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íč
Collection
List
, Set
.
Set
.
Iterator<E>
se třemi metodami:
boolean hasNext() E next() void remove()
List
,
což je rozšíření Collection
.
int
).
ArrayList
ArrayList
LinkedList
LinkedList
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
push
— vložení na vrchol zásobníku
pop
— odebrání z vrcholu zásobníku
peek
— přečtení (neodebrání) z vrcholu zásobníku
třída Queue
, struktura "FIFO" s operacemi
add
— přidání prvku do fronty
remove
— vybrání prvku z fronty
element
— přečtení (neodebrání) prvku z fronty
PriorityQueue
)
třída Deque
(čteme "deck")
Set
(což je rozšíření Collection
).
add
)
remove
)
contains
)
Standardní implementace množiny:
TreeSet
.
SortedSet
compareTo
vkládaných objektů — pokud implementují rozhraní Comparable
Comparator
) poskytnutých při vytvoření množiny.
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
Comparable
int compareTo(T t)
o1.compareTo(o2)
, která vrací celé číslo, kde rozhoduje jeho znaménko.
equals
, tzn. pro si rovné objekty
by compareTo
měla vrátit 0
.
Comparator
int compare(T o1, T o2)
T
obdobně
jako Comparable
vracením celého čísla se znaménkem.
Comparable
).
for
.
Příklad:
Set<String> strings = ... for(String s: strings) { System.out.println(s); }
Set
:
containsKey
),
get
),
put
, remove
, containsKey
):
hashCode
) na ukládáných objektech,
Collections
.
Collections
Collections
.
IllegalStateException
apod.
Hashtable
→ HashMap
, HashSet
(podle účelu)
Vector
→ List
Stack
→ List
nebo lépe Queue
či Deque
Enumeration
)
se dvěma metodami:
boolean hasMoreElements()
Object nextElement()
ArrayList
) - rychlý přímý přístup (přes index)
LinkedList
) — rychlý sekvenční přístup (přes iterátor)
ArrayList
— stejně rychlý a paměťově efektivnější
HashMap
, HashSet
) — rychlejší, ale neuspořádané (lze získat iterátor procházející klíče uspořádaně)
TreeMap
, TreeSet
) - pomalejší, ale uspořádané
LinkedHashSet
, LinkedHashMap