[[oktatas:programozás:java|< Java]]
====== Kollekciók ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2014, 2022
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Bevezetés =====
A kollekció, azt jelenti gyűjtemény. Dolgok gyűjteménye. Angolul Collection.
A kollekciókon összehasonlításokat végzünk, megnézzük tartalmaz-e egy elemet,
lekérdezzük hány eleme van, stb.
===== Kollekciók a Java nyelvben =====
A kollekciók esetén előfordulhat néhány hasznos eszköz:
* java.lang.Comparable interfész
* java.lang.Object osztály metódusai
* equals()
* hasCode()
* java.util.Iterator interfész
Kollekciók interfészei:
* Collection (java.util csomag)
* Set
* List
* Queue
* Map
* SortedMap
* NavigableMap
Az interfészekből megvalósított osztályok:
* **HashSet**
* a Set interfészből
* az elemekre nincs sorrend rögzítve
* LinkedHashSet
* (Set interfészből)
* tárolás a hozzáadás sorrendjében
* TreeSet
* Sorted és NavigableSet interfészből
* tárolás rendezetten; gyors keresés
* **ArrayList**
* List interfészből
* Többszállas program esetén nem szinkronizált
* Vector
* List interfészből
* Többszállas program esetén szinkronizált
* **LinkedList**
* List és Queue interfészből
* Gyorsabb beszúrás és törlés, lassabb iterálás
* PriorityQueue
* Queue interfészből
* Hashtable
* Map interfészből
* **HashMap**
* Map interfészből
* sorrend nincs rögzítve
* **LinkedHashMap**
* Map interfészből
* elemek a hozzáadás sorrendjében
* **TreeMap**
* SortedMap és NavigableMap interfészből
* rendezett tárolás
===== HashSet =====
import java.util.HashSet;
import java.util.Iterator;
class Program01
{
public static void main(String args[])
{
HashSet h = new HashSet();
//elem hozzáadása
h.add(35);
System.out.println(h.contains(35));
//az összes elem törlése
h.clear();
h.add(103);
h.add(107);
h.add(227);
if(h.contains(107))
System.out.println("Van 107-es elem");
Iterator it = h.iterator();
while(it.hasNext())
System.out.println(it.next());
System.out.println("Töröljük a 227-es értéket");
//törlés
h.remove(227);
for(Integer a : h)
System.out.println(a);
//méret
System.out.println(h.size());
//Object tömbbé alakítás
Object[] t = h.toArray();
System.out.println("A tömb első eleme: " + t[0]);
Integer[] t2 = h.toArray(new Integer[h.size()]);
for(Integer a : t2)
System.out.print(a + " ");
System.out.println();
}
}
===== ArrayList =====
import java.util.ArrayList;
class Program02
{
public static void main(String args[])
{
ArrayList t = new ArrayList();
t.add(43);
t.add(27);
t.add(32);
t.add(74);
t.add(48);
t.add(2, 50);
for(Integer a : t)
System.out.println(a);
System.out.println(t.contains(50));
System.out.println(t.get(2));
System.out.println(t.indexOf(50));
Integer b = t.remove(1);
System.out.println(b);
boolean c = t.remove(new Integer(48));
}
}
===== HashMap =====
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Iterator;
class Program03
{
public static void main(String args[])
{
HashMap m = new HashMap();
m.put("alma", "apple");
m.put("asztal", "table");
m.put("szék", "chair");
System.out.println(m.get("asztal"));
System.out.println(m.containsKey("alma"));
System.out.println(m.containsValue("apple"));
Set> h = m.entrySet();
System.out.println("------------------");
Iterator> i = h.iterator();
while(i.hasNext())
{
Map.Entry elem = i.next();
System.out.println("Kulcs: "+elem.getKey()+
"\térték: "+ elem.getValue());
}
System.out.println("------------------");
System.out.println("------------------");
for (Map.Entry entry : m.entrySet())
{
System.out.println(entry.getKey() + "\t" + entry.getValue());
}
System.out.println("------------------");
String magyar = m.get("alma");
System.out.println("Az alma jelentése: " + magyar);
Set h2 = m.keySet();
System.out.println("Van-e alma: " + h2.contains("alma"));
String s = m.remove("asztal");
System.out.println("Töröleve ez: " + s); //Eredmény: table
m.clear();
System.out.println(m.size());
}
}
==== Országok és fővárosok ====
import java.util.HashMap;
public class Model {
HashMap fovarosok;
public Model() {
fovarosok = new HashMap<>();
fovarosok.put("Norvégia", "Oslo");
fovarosok.put("Németország", "Berlin");
fovarosok.put("Finnország", "Helsinki");
fovarosok.put("Anglia", "London");
fovarosok.put("Csehország", "Prága");
fovarosok.put("Franciaország", "Párizs");
fovarosok.put("Svájc", "Bern");
fovarosok.put("Belgium", "Brüsszel");
fovarosok.put("Hollandia", "Amszterdam");
fovarosok.put("Szerbia", "Belgrád");
fovarosok.put("Törökország", "Ankara");
fovarosok.put("Ausztria", "Bécs");
fovarosok.put("Románia", "Bukarest");
fovarosok.put("Spanyolország", "Madrid");
fovarosok.put("Dánia", "Koppenhága");
fovarosok.put("Szlovákia", "Pozsony");
fovarosok.put("Olaszország", "Róma");
fovarosok.put("Svédország", "Stockholm");
fovarosok.put("Bulgária", "Szófia");
fovarosok.put("Albánia", "Tirana");
fovarosok.put("Lengyelország", "Varsó");
fovarosok.put("Horvátország", "Zágráb");
fovarosok.put("Koszovó", "Pristina");
fovarosok.put("Lettország", "Riga");
fovarosok.put("Monetengró", "Podgorica");
fovarosok.put("Portugália", "Lisszabon");
fovarosok.put("Görögország", "Athén");
fovarosok.put("Szlovénia", "Ljubljana");
}
}
public class App {
public static void main(String[] args) throws Exception {
System.out.println("HashMap");
Model model = new Model();
System.out.printf("Méret: %d\n",
model.fovarosok.size());
System.out.printf("Szerbia: %s\n",
model.fovarosok.get("Szerbia"));
}
}
==== Metódusok ====
Néhány metódus a teljesség igénye nélkül:
| clear() | A szótár törlése |
| isEmpty() | Űres-e? |
| put(Object kulcs, Object érték) | Szópár beszúrása |
| remove(Object kulcs) | Törlés kulcs alapján |
| boolean containsValue(Object érték) | Van-e ilyen érték? |
| boolean containsKey(Object kulcs) | Van-e ilyn kulcs? |
| boolean equals(Object objektum) | Egyenlőség vizsgálat |
| V get(Object kulcs) | Érték kulcs alapján |
| size() | Méret |
===== Várakozási sor =====
public class Program01 {
public static void main (String args[]) {
java.util.Queue sor;
sor = new java.util.LinkedList();
sor.add("Első");
sor.add("Második");
sor.add("Harmadik");
System.out.println(sor.remove());
System.out.println(sor.remove());
}
}
===== Az ArrayList és a Vector =====
^ ArrayList ^ Vector ^
| nem szinkronizált | szinkronizált \\ Többszálú környezetben az egyik \\ szál zárolja az objektumot |
| gyors, mert nem szinkronizált | lassú, mert szinkronizált |
| 50%-kal növeli a tömb kapacitását | 100%-kal növeli a tömb kapacitását, \\ vagyis megduplázza |
| A JDK 1.2-ben került be | Mindig benne volt a JDK-ban. |
A kollekció létrehozásakor a Java automatikusan több elemnek foglal helyet a memóriában.
Az ArrayList induláskor 10 elemnek foglal helyet, vagyis ez a kapacitása. Ha túllépi ezt a határt, akkor 50%-kal növeli tömb méretét. A Vector megduplázza a lefoglalt méretet.
Forrás:
* https://www.javatpoint.com/difference-between-arraylist-and-vector (2022)
* https://www.geeksforgeeks.org/how-to-increase-the-capacity-size-of-arraylist/
===== Szűrés =====
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) throws Exception {
List numList = new ArrayList<>();
numList.add(35);
numList.add(27);
numList.add(12);
numList.add(38);
Integer[] nums = numList
.stream()
.filter(e -> e > 30)
.toArray(Integer[]::new);
for(Integer num: nums) {
System.out.println(num);
}
}
}
Forrás:
* https://hellokoding.com/query-an-arraylist-in-java/ (2023)
===== Példák =====
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.Collection;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.HashMap;
class Program01
{
public static void main(String[] args)
{
//kiegyenlített fa
Map m = new TreeMap();
m.put("Valami", 1);
//List
List szavak = new ArrayList();
szavak.add("Első");
szavak.add("Második");
szavak.add("Harmadik");
for (String szo : szavak)
System.out.println(szo);
ListIterator li = szavak.listIterator();
while(li.hasNext())
{
System.out.println(li.next());
}
//Kollekció
Collection c = new ArrayList();
c.add("Egy");
c.add("Kettő");
c.add("Három");
Iterator it = c.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
//Hash tábla
Map szotar = new HashMap();
szotar.put("egy", "körte");
szotar.put("kettő", "szilva");
szotar.put("három", "barack");
}
}
===== Linkek =====
* http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html