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:
- Set:
- Rendezés nélküli, duplikátumokat nem tartalmazó kollekciók.
- Megvalósítások:
HashSet,LinkedHashSet,TreeSet.
- List:
- Rendezett kollekciók, melyek elemei index szerint elérhetők. Tartalmazhatnak duplikátumokat.
- Megvalósítások:
ArrayList,LinkedList,Vector,Stack.
- 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ésTreeMap). - Megvalósítások:
HashMap,LinkedHashMap,TreeMap,Hashtable.
- 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
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.
- Megvalósítások:
- Deque: Két végén is lehet beszúrni és törölni elemeket.
- Megvalósítások:
ArrayDeque,LinkedList.
- Megvalósítások:
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.