KODO STRUKTŪRA
Java duomenų kolekcijos
Java Collections Framework – tai sąsajų, klasių ir bendrų metodų rinkinys, padedantis saugoti, rasti, grupuoti ir tvarkyti kelis objektus.
Kam reikalingos kolekcijos?
Masyvo dydis nustatomas jį kuriant. Kolekcija gali augti ar mažėti programai veikiant ir pateikia paruoštus metodus elementams pridėti, šalinti, ieškoti ar pereiti.
| Savybė | Masyvas | Kolekcija |
|---|---|---|
| Dydis | Nustatomas sukūrimo metu | Dažniausiai gali keistis |
| Elementai | Gali saugoti ir primityviuosius tipus | Saugo objektus; primityvams naudojamos wrapper klasės |
| Veiksmai | Pagrindiniai veiksmai atliekami rankiniu kodu arba per Arrays | Turi metodus, pvz., add(), remove(), contains() |
Pavyzdžiui, List<Integer> saugo Integer objektus. Java automatiškai gali paversti int į Integer; tai vadinama autoboxing.
Sąsajos ir jas įgyvendinančios klasės
Sąsaja nusako, kokius veiksmus kolekcija turi mokėti atlikti. Konkreti klasė pasirenka, kaip tuos veiksmus įgyvendinti.
| Sąsaja | Dažnos klasės | Paskirtis |
|---|---|---|
List | ArrayList, LinkedList | Išlaiko eilės tvarką, leidžia pasikartojimus ir prieigą pagal indeksą. |
Set | HashSet, LinkedHashSet, TreeSet | Saugo tik unikalius elementus. |
Queue / Deque | ArrayDeque, LinkedList | Tvarko elementus pagal apdorojimo eilę arba leidžia veiksmus abiejuose galuose. |
Map | HashMap, LinkedHashMap, TreeMap | Saugo rakto ir reikšmės poras; kiekvienas raktas unikalus. |
Map priklauso Collections Framework, tačiau sudaro atskirą rakto ir reikšmės porų hierarchiją. List, Set ir Queue priklauso Collection hierarchijai.
List – tvarkingas sąrašas
import java.util.ArrayList;
import java.util.List;
List<String> pirkiniai = new ArrayList<>();
pirkiniai.add("duona");
pirkiniai.add("pienas");
pirkiniai.add("duona");
System.out.println(pirkiniai);
System.out.println(pirkiniai.get(1));[duona, pienas, duona]
pienas
- Kintamojo tipas yra sąsaja
List<String>, o objektas sukuriamas suArrayList. <String>nurodo, kad sąraše galima saugoti tik tekstus.Listleidžia dvi vienodasduonareikšmes.get(1)paima antrą elementą, nes indeksai prasideda nuo nulio.
Set – unikalios reikšmės
import java.util.HashSet;
import java.util.Set;
Set<String> miestai = new HashSet<>();
miestai.add("Vilnius");
miestai.add("Kaunas");
miestai.add("Vilnius");
System.out.println(miestai.size());
System.out.println(miestai.contains("Kaunas"));2
true
Vilnius pridedamas du kartus, tačiau Set jo nedubliuoja. HashSet negarantuoja elementų išvedimo tvarkos, todėl pavyzdyje tikrinamas dydis ir konkretaus miesto buvimas.
Map – raktai ir reikšmės
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> pazymiai = new HashMap<>();
pazymiai.put("Ieva", 9);
pazymiai.put("Mantas", 8);
pazymiai.put("Ieva", 10);
System.out.println(pazymiai.get("Ieva"));
System.out.println(pazymiai.size());10
2
Map<String, Integer>naudoja vardą kaip raktą ir pažymį kaip reikšmę.put("Ieva", 9)įrašo pirmą pažymį.- Tam pačiam raktui vėliau priskyrus
10, ankstesnė reikšmė pakeičiama. - Žemėlapyje lieka du unikalūs raktai.
Kolekcijos elementų perėjimas
List<String> vardai = List.of("Rūta", "Jonas", "Aistė");
for (String vardas : vardai) {
System.out.println(vardas);
}Rūta
Jonas
Aistė
for-each ciklas po vieną paima kiekvieną kolekcijos elementą. Sudėtingesniais atvejais galima naudoti Iterator, forEach() arba Stream API.
Kaip pasirinkti kolekciją?
- Rinkis
List, kai svarbi eilės tvarka, indeksai arba leidžiami pasikartojimai. - Rinkis
Set, kai kiekviena reikšmė turi būti unikali. - Rinkis
Map, kai reikšmę reikia rasti pagal unikalų raktą. - Rinkis
Queue, kai elementai turi būti apdorojami nustatyta eile.
Pradžioje dažniausiai pakanka ArrayList, HashSet, HashMap ir ArrayDeque.
Dažni metodai
| Metodas | Paskirtis |
|---|---|
add() | Prideda elementą į Collection. |
remove() | Pašalina elementą. |
contains() | Patikrina, ar elementas yra kolekcijoje. |
size() | Grąžina elementų skaičių. |
isEmpty() | Patikrina, ar kolekcija tuščia. |
clear() | Pašalina visus elementus. |
put() / get() | Įrašo arba gauna Map reikšmę pagal raktą. |

