Collections Flashcards
Syntaxe vytvoreni String pole
prazdne
hodnotami (2)
String[] array = new String[2];
String[] array = new String[] {“a”, “b”};
String[] array = {“a”, “b”};
Prazdne pole ma po vytvoreni v komurkach co?
defaultni hodnoty
Syntaxe vytvoreni dvourozmerne matice Byte
prazdne
hodnotami
Byte[][] matrix = new Byte[2][3]; // radek, sloupec
Byte[][] matrix = {{1,2,3},{2,3}} // 2 radky, 3 sloupce, posledni hodnota je 0
Metody kopirovani z pole do pole (3)
System.arraycopy(source, sposition, destination, dposition, length)
var x = Arrays.copyOf(source, position)
var x = Arrays.copyOfRange(source, position, length)
Jak seradit prvky v poli
Jak seradit prvky v kolekci
Arrays.sort(array, comparator)
Collections.sort(collection, comparator)
Jak se kompilator chova k generics
Smaze je - nahradi za Object. Ale kde se pouzije hodnota, pretypuje se na spravny typ.
Wildcards:
neznamy typ
nadtyp (nebo stejny) - lowerbound wc.
podtyp (nebo stejny) - upperbound wc.
- syntax + ktery z nich definuje read only kolekci?
List<?>
List<? super X>
List<? extends X>
List<?>
List<Product> products = new ArrayList<Food>(); projde?</Food></Product>
ne, collections jsou invariantni - typ musi sedet
Product[] products = new Food[]; projde?
ano, arrays jsou covariantni - typ muze byt urcitejsi
Ifc kolekce pro oboustrannou frontu + impl (3)
Jaka je impl. velikost?
Deque<T> d = new ArrayDeque<>();
new ArrayDeque<>(list);
new ArrayDeque<>(20);
16</T>
Oboustranna fronta - metody:
insert dopredu/dozadu
get odpredu/odzadu
get&remove odpredu/odzadu
offerFirst, offerLast
peekFirst, peekLast
pollFirst, pollLast
Pristup oboustranne fronty k null
Null hodnoty nelze vkladat
Gettery vraci null, pokud je kolekce prazdna
Kolekce key,value ifc+impl (3)
Jaka je implicitni velikost?
Map<T> m = new HashMap<>();
new HashMap<>(100);
new HashMap<>(otherMap);</T>
Iterator na kolekci:
podminky, vytvoreni
jak zjistim, vratim, odstranim prvek?
implements Iterable
coll.iterator()
hasNext(), next(), remove()
Jaka je podminka kolekce, aby mohla lezt do foreach
implements Iterable
Seznam - ifc+impl (3)
Jaka je impl. velikost
List<T> l = new ArrayList<>();
new ArrayList<>(100);
new ArrayList<>(set);</T>
Metoda pro vytvoreni immutable seznamu, pokud mas prvky
List.of(a, b, c);
Metoda pro vytvoreni mutable seznamu, pokud mas prvky (mohou byt v poli)
Arrays.asList(a, b)
Arrays.asList(a[])
Seznam metody:
pridej a posun (2p), pridej a prepis prvek
odstran (2p)
obsahuje prvek
jakou ma prvek pozici
add(T), add(index, T), set(index, T)
remove(index), remove(T) - prvni nalezeny
contains(T)
indexOf(T) - pokud neni, vraci -1
HashSet
co je dobre pro vykon
co naopak ne
je thread safe?
+ rovnomerne rozdeleni hashu
- nadstrelena kapacita
nema, to ma SynchronizedSet
Load faktor na kolekci
Defaultni pro HashSet
O kolik se kapacita zvetsi pri pridani prvku nad
0.75
Set - ifc+impl (4)
Implicitni kapacita
Set<T> s = new HashSet<>();
new HashSet<>(100);
new HashSet<>(100, 0.75);
new HashSet<>(coll);
16</T>
Metoda vytvoreni immutable mnoziny z prvku
Set.of(a, b, c)
Set - metody
pridej, odeber, zjisti
add, remove, contains
Metody menici poradi prvku v kolekci (3)
Collections.sort(c)
Collections.revers(c)
Collections.shuffle(c)
Metoda vyhledani prvku v kolekci
Collections.binarySearch(c, element)
Metoda naplneni pole stejnymi hodnotami
Collections.fill(c, value)
Metoda pro odstraneni prvku nesplnujicich podminku z kolekce
collection.removeIf(predicate)
Metoda ulozeni kolekce do pole
collection.toArray(array)
Implementace mnoziny (4)
HashSet, TreeSet, SortedSet, SynchronizedSet
Kolekce maji/nemaji thread safe operace?
Maji
Metody pro praci s polem:
vyplneni hodnotou
nalezeni prvku
jsou pole stejna
serad(2)
Arrays.fill(array, start, end, value)
Arrays.binarySearch(array, value)
Arrays.equals(a, b)
Arrays.sort(array), Arrays.sort(array, comparator)
Priklad implementace komparatoru
public class MyComp<T> implements Comparator {
public int compare(T t1, T t2) {
return t1.compareTo(t2);
}
}</T>
Vyhodnocovani v array, co se vyhodnoti driv
a[(a=b)[2]
Nejdriv vnejsi a, potom vnitrek
Jak se da provest akce nad mapou
- pomoci lambdy
map.forEach((k, v) -> action(k,v));
Jak se da provest akce nad listem
- pomoci existujici metody
list.forEach(SomeClass::method);
Co se stane, pokud vytvorim: Set.of(1,2,2,3)
Runtime error
Set je immutable a nemuze obsahovat stejne prvky
Generics pro potomky tridy
<T>
</T>
Je Comparator functional interface?
Jo
retezeni komparatoru sekvencne - syntax
comparator1.thenComparing(comparator2)
uprava komparatoru:
zachazeni s nully (2)
obracene poradi
C.nullsFirst(c);
C.nullsLast(c);
c.reversed();
Klonovani
- podminka (+trest)
- syntax
- jaka trida ma implementaci clone
- co dela
Trida implementuje Cloneable (vyjimka pri klonovani)
Product p2 = (Product) p1.clone();
Object
Kopii objektu na heapu
Definuj predicate nad Stringem ze neni empty
Predicate<String> nonEmpty = (x) -> !x.isEmtpy();</String>
jak funguje list.add(index, element)
Prida prvek na index a posune zbytek doprava.
Element
- zkopiruje do sebe, pokud je to primitiv
- zkopiruje! do sebe referenci, pokud je to objekt
(pozor u GC, tady se drzi druha reference)
Metoda, ktera pro dany klic K nahradi hodnotu, pokud je rovna V, za V1
map.replace(K, V, V1)
Vytvor komparator podle length (comparing
Comparator.comparing((x) -> x.length())
Vytvor komparator podle length (comparing
Comparator.comparing((x) -> x.length())
Jak vytvorim map pro paralelni zpracovani, load factor 0.8, kapacita 5 a concurrency level 15 (max pocet vlaken)
new ConcurrentMap(5, 0.8f, 15)
Jak zapisu seznam do arraye
var myArray = list.toArray(someArray);
pokud se vejde, vratim puvodni array, jinak novy