V tomto úvodním článku do série pokročilá java se podíváme na zoubek kolekcím (collections in java). Kolekce jsou jako kontejnery, které v sobě drží další objekty. Jinak můžeme kolekce chápat také jako seznamy. Seznam telefonních čísel. Seznam osob. Seznam aut. Seznam souborů. Seznam čísel ....
U kolekcí budeme hovořit o Rozhrání, Implementaci a Algoritmech.
Java collection framework – Java sama o sobě poskytuje několik kolekcí. Poskytuje nám jejich implementace a také algoritmy pro vyhledávání, vkládání, třídění a podobně. Rozhraní kolekcí v tomto frameworku jsou generická. Tedy umožňují do nich vkládat různé typy objektů. Pamatujte, že Java je striktně typový jazyk a do proměnné typu String prostě int nedáš, musí tam jít pouze String. Ke generikám se ještě dostaneme v pozdějším článku.
Seznam rozhraní Java collection frameworku
Collection – top v hierarchii, používá se k přesunu kolekce, manipulaci kde se požaduje aby tam přišla jakákoliv kolekce. Do Collection můžeš vložit jakýkoli typ kolekce, který tuto kolekci rozšiřuje. Set – nemůže obsahovat duplicity List – seznam, může obsahovat duplicity, pořadí elementů je zachováno pomocí indexů Queue – FIFO – first in first out, což přijde první do této kolekce tak z ní i první odejde, některé implementace mají výjimky Deque - FIFO i LIFO (last in first out) - elementy mohou být vkládány i vybírány z obou konců Map – object který mapuje objekty k jejich klíčům, nemůže obsahovat totožné klíče SortedSet a SortedMap – jsou vlastně seřazeny Map a Set Implementace
Neobsahuje duplicitní elementy – lépe řečeno nemůže obsahovat duplicitní elementy.
HashSet – neuchovává pořadí v jakém byly elementy vloženy, ale pracuje nejrychleji
LinkedHashSet – uchovává pořadí elementů v jakém byly vloženy
TreeSet – pořadí elementů je seřazeno podle jejich hodnot, je pomalejší
Mějme kolekci, která obsahuje elementy, které jsou duplicitní. Jak z ní nejrychleji získáme kolekci, která nemá duplicity?
Collection<Type> noDups = new HashSet<Type>(c);
Funguje to tak, že z kolekce se vytvoří Set. A Set už z definice nemůže obsahovat duplicity. Přidání elementů do Setu:
Set<String> set1 = new HashSet<>();
String s = "e";
set1.add("element1");
set1.add("element2");
set1.add("element3");
set1.add("element4");
set1.add(s);
Je element v kolekci?
System.out.println(set1.contains("e")); //true
Odstranění elementu z kolekce:
set1.remove(s);
Procházení přes Set:
Iterator i = set1.iterator();
while (i.hasNext()){
System.out.println(i.next());
}for(String s : set1) {
System.out.println(s);
}
Zeptám se, jestli všechny elementy ze set1 jsou iv set2
set1.containsAll(set2));
Odstraním z set1 všechny shodné elementy se set2
set1.removeAll(set2);
Vše ze set2 přidám do set1
set1.addAll(set2);
List
Uchovává pořadí elementů. Elementy jsou přístupné i pomocí indexů. Je možné do již vytvořeného Listu přidat nové elementy i na indexy, které jsou obsazeny – elementy se posunou. Můžeme v nich vyhledávat indexOf a lastIndexOf. U dopisů si musíme dávat velký pozor na to, abychom neshodili program kvůli přístupu k neexistujícím elementům – respektive k neexistujícím indexům v listu. Například máš List se 4 elementy a chceš přistoupit k 6-tému elementu.
Základní pomocné algoritmy, specifické ke List:
sort — setřídí elementy v listu
shuffle — náhodně promíchá elementy v listu.
reverse — otočí pořadí elementů v Liste
rotate — otočí pořadí všech elementů od specifického indexu
swap — přehodí elementy z Listu na specifikovaných indexech
replaceAll — nahradí všechny výskyty specifikované hodnoty za druhou specifikovanou hodnotu
fill — přepíše všechny elementy v listu za specifikovanou hodnotu
ArrayList – přizpůsobuje svou velikost, základní pole musela mít specifikovanou délku při vytvoření, nemohla růst nebo se zmenšovat LinkedList – jiná implementace, rozdílu jsou v časových zátěžích s různými operacemi nad Listy
Přidání elementů do Listu:
List<String> list = new ArrayList<>();
list.add("list1");
list.add("list2");
list.add("list3");
list.add("list4");
list.add("list5");
Výběr elementů z listu na indexy 1:
list.get(1);
Je prázdný?
list.isEmpty();
Přidej na pozici 2:
list.add(2,"list2b");
Odstraň element:
list.remove("list1");
list.remove(4);
Různé manipulace:
Collections.sort(list);
Collections.shuffle(list);
Collections.reverse(list);
Collections.rotate(list,2);
Collections.swap(list, 0, 1);
Collections.replaceAll(list, "list4", "new list4");
Collections.fill(list,"Jaro");
Map
Mapa obsahuje hodnoty vázané na klíč. Takže to máme anglicky key – value hodnoty. Klíče musí být unikátní.
HashMap – nedrží si pořadí, náhodné uspořádání
LinkedHashMap – drží pořadí
Vložení do Mapy:
Map<Integer,String> map = new HashMap<>();
map.put(10,"jaro");
map.put(1,"fero");
map.put(3,"duro");
map.put(4000,"karol");
map.put(4000,"peter"); // přepíše předchozí element
Získáme a vypíšeme hodnotu elementu s klíčem 1:
System.out.println(map.get(1));
Přechod přes elementy Mapy:
for(Map.Entry m : map.entrySet()){
System.out.printf("key %d, value %s %n",m.getKey(),m.getValue());
🥇 Sme jednotka v online vzdelávaní na Slovensku. Na našom webe nájdeš viac ako 300 rôznych videokurzov z oblastí ako programovanie, tvorba hier, testovanie softwaru, grafika, UX dizajn, online marketing, MS Office a pod. Vyber si kurz, ktorý ťa posunie vpred ⏩