2017 m. spalio 21 d., šeštadienis

Java kolekcijos

java.util.Collection - pagrindinis kolekcijų interfeisas. Žymi elementų rinkinį ir įgyvendina java.util.Iterable - kolekcijas galima naudoti foreach sakinyje.
java.util.List - kolekcija sauganti surikiuotus elementus (sąrašas)
java.util.Set - kolekcija sauganti unikalius elementus (aibė)
java.util.SortedSet - kolekcija sauganti surūšiuotus unikalius elementus (surūšiuota aibė)


Foreach

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

for (String eilute: eilutes) {
System.out.println(eilute);
}

Pagrindinės List realizacijos

java.util.ArrayList - realizacija paremta dinamiškai augančiu masyvu
  • Greitesnė iteracija
  • Kompaktiškas
  • Greitesnis iterpimas gale ar arti galo
  • Greitesnė prieiga prie n-tojo elemento
java.util.LinkedList - realizacija paremta dvipusiu sąrašu
  • Greitesnis įterpimas į sąrašo vidurį
  • Greitesnis šalinimas iš sąrašo vidurio
List pavyzdys

List<Integer> skaiciai = new ArrayList<>();
skaiciai.add(4);
skaiciai.add(5);

for (Integer skaicius: skaiciai) {
System.out.println(skaicius);
}

Pagrindinės Set ir Sorted realizacijos

  • java.util.Set
    • java.util.HashSet - realizacija paremta HashMap
  • java.util.SortedSet
    • java.util.TreeSet - realizacija paremta TreeMap
java.util.Map

Kolekcija sauganti elementų poras (K, V), kur K raktas pagal kurį galima surasti V.
Pavyzdžiui galime į kolekciją dėti automobilių objektus pagal jų numerį.


Map realizacijos

java.util.HashMap - saugo elementus pagal rakto maišos (hash) funkciją
java.util.LinkedHashMap - saugo elementus kaip ir HashMap, papildomai saugodamas ir elementų tvarką.
Aiški elementų iteracijos tvarka (pagal įdėjimo arba priėjimo tvarką).
java.util.TreeMap - saugo elementus dvejetainiame medyje. Aiški elementų iteracijos tvarka (pagal raktą).

Map pavyzdys

HashMap<Integer, String> skaiciuVardai = new HashMap<>();
skaiciuVardai.put(1, “Vienas”);
skaiciuVardai.put(2, “Du”);
skaiciuVardai.put(3, “Trys”);

System.out.println(skaiciuVardai.get(2));


hashCode() ir equals()

  • Visi objektai įgyvendina hashCode() ir equals()
  • Pagal nutylėjimą realizacijos paveldimos iš java.lang.Object
    • Neteisingos tipiniams naudojimo atvejams
equals()

  • Standartinis atsako į klausimą “Ar tai tas pats objektas?” (lyg lyginant su ==)
  • Kontraktas sako, kad turėtų atsakyti “Ar tai toks pat objektas?”
  • Perrašome, tam kad du tokie patys objektai galėtų būti
    • lygūs. Pvz.: sukurkime du skaičiaus objektus:
    • Integer penki = new Integer(5);
    • Integer kitasPenki = new Integer(5);
    • Jei būtų naudojamas standartinis equals(...) objektai nebūtų lygūs
• Paprastai įgyvendinamas lyginant laukų reikšmes.
• IDE paprastai moka sugeneruoti

hashCode()

Panaudojamas HashMap objektų dėliojimui į “kibirus”. Nuo teisingos ir geros realizacijos priklauso ar objektą bus galima teisingai panaudoti kaip HashMap raktą. Pasak equals() lygių metodų hashCode() turi grąžinti vienodą reikšmę.IDE moka sugeneruoti teisingą


Palyginami objektai

  • Palyginami objektai gali būti “didesni” ar “mažesni” vieni už kitus (arba “pirmesni” ir “paskesni”)
  • Palyginami objektai įgyvendina java.util.Comparable interfeisą.
  • Tokie objektai talpinami į sąrašus gali būti išrūšiuojame.

java.util.Comparator

  • Intefeisas leidžiantis įgyvendinti rušiavimo tvarkos nustatymo algoritmą nerūšiuojamiems objektams
  • Naudojamas TreeSet, TreeMap

Komentarų nėra:

Rašyti komentarą

Etiketės