Mi van beállítva a Java-ban
Emlékezzünk vissza röviden, hogy a Set interfész egy halmazt (halmazt) határoz meg. Kibővíti a gyűjteményt , és meghatározza azon gyűjtemények viselkedését, amelyek nem engedélyezik az elemek ismétlődését. Így az add() metódus false értéket ad vissza , ha egy ismétlődő elemet próbálnak hozzáadni a halmazhoz. Az interfész nem határoz meg további saját metódusokat. A Set felület gondoskodik a tárolt objektumok egyediségéről, az egyediséget az equals() metódus implementációja határozza meg. Ezért, ha a létrehozott osztály objektumai hozzáadásra kerülnek a Set -hez , kívánatos az equals() metódus felülbírálása.LinkedHashSet osztály
Mielőtt a LinkedHashSet osztályról beszélnénk , meg kell említenünk közeli rokonát, a HashSet osztályt. A HashSet megvalósítja a Set interfészt. Létrehoz egy gyűjteményt, amely az elemeket egy hash táblában tárolja. A hash tábla elemei kulcs-érték párokként vannak tárolva. A kulcs megadja az érték tárolására szolgáló cellát (vagy szegmenst). A kulcs tartalma egy egyedi érték meghatározására szolgál, amelyet hash kódnak neveznek. A hash kódot felfoghatjuk objektumazonosítónak, bár ennek nem kell egyedinek lennie. Ez a hash kód egyben indexként is szolgál, amely a kulcshoz tartozó adatokat tárolja. A LinkedHashSet Java osztály új metódusok hozzáadása nélkül bővíti ki a HashSet-et .A LinkedHashSet lehetővé teszi, hogy gyorsan ellenőrizze egy bejegyzés létezését, akárcsak a HashSet , de tartalmaz egy rendezett listát. Ez azt jelenti, hogy tárolja az elemek beillesztési sorrendjét. Más szavakkal, a LinkedHashSet a halmazelemek csatolt listáját a beillesztésük sorrendjében tartja fenn. Ez lehetővé teszi a halmazba történő beillesztés rendezett iterációját. Ez azonban azt eredményezi, hogy a LinkedHashSet osztály hosszabb ideig hajt végre műveleteket, mint a HashSet osztály.A LinkedHashSet fontos tulajdonságai
-
Egyedi elemeket csak LinkedHashSet- ben tudunk tárolni
-
A LinketHashSet lehetővé teszi, hogy az elemeket ugyanabban a sorrendben bontsuk ki, mint ahogyan beszúrjuk
-
A LinkedHashSet nincs szinkronizálva
-
A LinkedHashSet lehetővé teszi a null elemek tárolását
-
A LinkedHashSet kivonatolási technikát használ az elemek meghatározott indexen történő tárolására egy hash kód alapján
LinkedHashSet Methods
A szülőosztályaitól örökölt metódusokon kívül a HashSet a következő metódusokat határozza meg:-
A boolean add(Object o) hozzáadja a megadott elemet ehhez a halmazhoz, ha az még nincs jelen.
-
A void clear() minden elemet eltávolít ebből a halmazból.
-
Az Object clone() ennek a LinkedHashSet példánynak egy sekély másolatát adja vissza: maguk az elemek nincsenek klónozva.
-
A boolean include(Object o) értéke igaz, ha ez a halmaz tartalmazza a megadott elemet.
-
A boolean isEmpty() igazat ad vissza , ha ez a halmaz nem tartalmaz elemeket.
-
Az iterator() az iterátor() egy iterátort ad vissza a halmaz elemei felett.
-
A boolean remove(Object o) eltávolítja a megadott elemet ebből a halmazból, ha van.
-
Az int size() a halmaz elemeinek számát adja vissza (elemeinek számát).
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetEx1 {
public static void main(String[] args) {
//LinkedHashSet() Init
Set<String> set = new LinkedHashSet<>();
//adding elements to LinkedHashSet
set.add("Re"); //first added element
set.add("Do");
set.add("Fa");
set.add("Sol");
set.add("La");
set.add("Ti");
set.add("Mi");//last added element
System.out.println(set);
}
}
A kimenet a következő:
2. példa: Duplikátum hozzáadása a LinkedHashSet-hez
Tegyük be ismét a LinkedHashSet 7 elemét a kottanevekkel, és tegyünk egy új elemet, amely megegyezik az előzőleg elhelyezett elemekkel.
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetEx2 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Re");
set.add("Do");
set.add("Fa");
set.add("Sol");
set.add("La");
set.add("Ti");
set.add("Mi");
set.add("Sol");
System.out.println(set);
}
}
A program kimenete itt található:
3. példa Elemek eltávolítása a LinkedHashSetből
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSet3 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Re");
set.add("Do");
set.add("Fa");
set.add("Sol");
set.add("La");
set.add("Ti");
set.add("Mi");
System.out.println(set);
set.remove("Fa");// removing an element from our set
set.remove("Score");//trying to remove element that isn't in set
System.out.println(set.remove("Score"));
System.out.println("Print our set without elements removed: ");
System.out.println(set);
set.clear();
System.out.println("Print out our set after clear command: ");
System.out.println(set);
}
}
A program kimenete itt található:
LinkedHashSet vs HashSet
Ez a két osztály közeli rokon. A HashSet- en belül azonban a HashMap-et használja az objektumok tárolására, míg a LinkedHashSet a LinkedHashMap-et használja . Ha nem kell fenntartania a beillesztési sorrendet, hanem egyedi objektumokat kell tárolnia, célszerűbb a HashSet használata . Ha fenn kell tartania az elemek beillesztési sorrendjét, akkor a LinkedHashSet az Ön választása. A LinkedHashSet teljesítménye egy kicsit lassabb, mint a HashSet , mivel a LinkedHashSet belső LinkedList segítségével tartja fenn az elemek beillesztési sorrendjét. Vegyünk egy példát:
import java.util.*;
public class LinkedHashSetExample1 {
public static void main(String[] args) {
// while regular hash set orders its elements according to its hashcode stamps
Set<Integer> regularHashSet = new HashSet<>();
regularHashSet.add(7);
regularHashSet.add(3);
regularHashSet.add(5);
regularHashSet.add(65536);
regularHashSet.add(9);
// few duplicates
regularHashSet.add(5);
regularHashSet.add(7);
// next will print:
// > regularHashSet = [65536, 3, 5, 7, 9]
System.out.println("regularHashSet = " + regularHashSet);
// linked hash set keeps order of adding unchanged
Set<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(7);
linkedHashSet.add(3);
linkedHashSet.add(5);
linkedHashSet.add(65536);
linkedHashSet.add(9);
// few duplicates
linkedHashSet.add(5);
linkedHashSet.add(7);
// next will print:
// > linkedHashSet = [7, 3, 5, 65536, 9]
System.out.println("linkedHashSet = " + linkedHashSet);
}
}
A program kimenete:
Java LinkedHashSet használata valós alkalmazásokban
Mivel a LinkedHashSet lehetővé teszi a bejegyzések meglétének gyors ellenőrzését és a rendelések tárolását is, ez a gyűjtemény meglehetősen kényelmesnek tűnik a duplikációk eltávolítására a listáról. Vagy például olyan problémák megoldása, mint az utoljára látott tárgy a táskámban. Vagy emlékszel egy ilyen játékra, a Pokemon Go-ra? A LinkedHashSet tárolhatja az Ön által talált Pokémonok listáját, és azt, hogy milyen sorrendben találkoztak az utadon. Ebben az esetben az „ismételt” Pokémon többé nem kerül fel a listára. Vagy például a főnökök listája szintek szerint, akikkel már találkozott bármelyik szinttel rendelkező játékban. Vagy a kozmikus testek felfedezésének története. LinkedHashSetsegítségével gyorsan ellenőrizheti, hogy egy szóköztörzs szerepel-e már a listában vagy sem, és ha nincs ott, akkor hozzáadhatja a listához. Vegyünk egy példát az ismétlődések kiküszöbölésére.
import java.util.*;
class LinkedHashSetExample2 {
public static void main(String[] args) {
List<String> listWithDuplicates = List.of("some","elements","with", "few", "duplicates", "were", "here", "duplicates", "duplicates");
Set<String> linkedHashSet = new LinkedHashSet<>(listWithDuplicates);
List<String> listWithoutDuplicates = new ArrayList<>(linkedHashSet);
// next will print:
// > listWithDuplicates = [some, elements, with, few, duplicates, here, duplicates, duplicates]
System.out.println("listWithDuplicates = " + listWithDuplicates);
// next will print:
// > listWithoutDuplicates = [some, elements, with, few, duplicates, here]
System.out.println("listWithoutDuplicates = " + listWithoutDuplicates);
// -------------------------------------------------------------------------
// while using regular Hash Set will generally produces some unexpected order
Set<String> regularHashSet = new HashSet<>(listWithDuplicates);
// next will print:
// > linkedHashSet = [some, elements, with, few, duplicates, were, here]
System.out.println("linkedHashSet = " + linkedHashSet);
// next will print:
// > regularHashSet = [here, some, with, duplicates, were, elements, few]
System.out.println("regularHashSet = " + regularHashSet);
}
}
A program kimenete itt található:
GO TO FULL VERSION