Sobes.tech
Junior

Milyen típusú gyűjtemények léteznek Java-ban?

sobes.tech MI

Válasz az MI-től

Java-ban a kollekciók fő típusait a J2SE Collections Framework mutatja be, és három fő kategóriába sorolhatók:

  1. Set:
    • Rendezés nélküli, duplikátumokat nem tartalmazó kollekciók.
    • Megvalósítások: HashSet, LinkedHashSet, TreeSet.
  2. List:
    • Rendezett kollekciók, melyek elemei index szerint elérhetők. Tartalmazhatnak duplikátumokat.
    • Megvalósítások: ArrayList, LinkedList, Vector, Stack.
  3. Map:
    • Párban tárol "kulcs-érték" adatokat. A kulcsok egyediek, az értékek nem. Az elemek sorrend nélkül tárolódnak (kivéve LinkedHashMap és TreeMap).
    • Megvalósítások: HashMap, LinkedHashMap, TreeMap, Hashtable.

Ezeken kívül léteznek kevésbé elterjedt interfészek is:

  • Queue: Olyan kollekció, amely az elemeket a feldolgozásukig tartja. Általában FIFO (elsőként be, elsőként ki) elv szerint működik.
    • Megvalósítások: PriorityQueue, ArrayDeque, LinkedList.
  • Deque: Két végén is lehet beszúrni és törölni elemeket.
    • Megvalósítások: ArrayDeque, LinkedList.

A Collection absztrakt osztály a legtöbb kollekció hierarchiájának gyökérfelülete (Set, List, Queue). A Map nem valósítja meg a Collection-t.

Használati példák:

// ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Duplikátum megengedett

// HashSet
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Figyelmen kívül hagyja, mivel duplikátum nem engedélyezett

// HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Orange", 1); // Az értékek lehetnek azonosak

Egy adott implementáció kiválasztása a szükséges jellemzőktől függ: sorrend megtartása, duplikátumok engedélyezése, hozzáférési és beszúrási sebesség, több szálas környezet támogatása stb. Például az ArrayList gyors indexeléshez ideális, a LinkedList gyakori beszúrások/eltávolítások esetén, a HashSet gyors keresést biztosít egyedi elemekhez, a HashMap pedig kulcs szerint tárol adatokat. A Vector és a Hashtable szinkronizált (szálbiztos) implementációk, de általában jobb nem szinkronizált verziókat (ArrayList, HashMap) használni, és a szinkronizációt más szinten kezelni, vagy a java.util.concurrent csomag kollekcióit alkalmazni. A LinkedHashSet és LinkedHashMap megőrzi a beszúrás sorrendjét. A TreeSet és TreeMap rendezett sorrendben tárolja az elemeket. Az ArrayDeque gyakran előnyösebb a Stack és LinkedList-hez képest, ha veremként vagy sorként használjuk, jobb teljesítmény miatt. A PriorityQueue az elemeket természetes sorrendjük vagy egy Comparator segítségével rendezi.