Ce este setat în Java
Să ne amintim pe scurt că interfața Set definește un set (set). Extinde Colecția și definește comportamentul colecțiilor care nu permit elemente duplicate. Astfel, metoda add() returnează false dacă se încearcă adăugarea unui element duplicat la set. Interfața nu definește nicio metodă suplimentară proprie. Interfața Set are grijă de unicitatea obiectelor stocate, unicitatea este determinată de implementarea metodei equals() . Prin urmare, dacă obiectele clasei create vor fi adăugate la Set , este de dorit să se suprascrie metoda equals() .Clasa LinkedHashSet
Înainte de a vorbi despre clasa LinkedHashSet , trebuie să menționăm ruda ei apropiată, clasa HashSet . HashSet implementează interfața Set . Acesta creează o colecție care stochează elementele într-un tabel hash. Elementele unui tabel hash sunt stocate ca perechi cheie-valoare. Cheia specifică celula (sau segmentul) pentru a stoca valoarea. Conținutul cheii este folosit pentru a determina o valoare unică numită cod hash. Ne putem gândi la un cod hash ca la un identificator de obiect, deși nu trebuie să fie unic. Acest cod hash servește și ca index în care sunt stocate datele asociate cheii. Clasa Java LinkedHashSet extinde HashSet fără a adăuga metode noi.LinkedHashSet vă permite să verificați rapid existența unei intrări, la fel ca HashSet , dar conține o listă ordonată în interior. Aceasta înseamnă că stochează ordinea de inserare a elementelor. Cu alte cuvinte, LinkedHashSet menține o listă legată de elemente de set în ordinea în care au fost inserate. Acest lucru permite iterația ordonată a inserției într-un set. Dar acest lucru face ca clasa LinkedHashSet să efectueze operații mai lungi decât clasa HashSet .Caracteristici importante ale LinkedHashSet
-
Putem stoca elemente unice doar într-un LinkedHashSet
-
LinketHashSet ne permite să extragem elemente în aceeași ordine în care inserăm
-
LinkedHashSet nu este sincronizat
-
LinkedHashSet permite stocarea elementelor nule
-
LinkedHashSet folosește o tehnică hash pentru a stoca elemente la un index specificat pe baza unui cod hash
Metode LinkedHashSet
Pe lângă metodele moștenite de la clasele părinte, HashSet definește următoarele metode:-
boolean add(Object o) adaugă elementul specificat la acest set dacă nu este deja prezent.
-
void clear() elimină toate elementele din acest set.
-
Object clone() returnează o copie superficială a acestei instanțe LinkedHashSet : elementele în sine nu sunt clonate.
-
boolean contains(Object o) returnează adevărat dacă acest set conține elementul specificat.
-
boolean isEmpty() returnează adevărat dacă acest set nu conține elemente.
-
Iterator iterator() returnează un iterator peste elementele acestui set.
-
boolean remove(Object o) elimină elementul specificat din acest set, dacă este prezent.
-
int size() returnează numărul de elemente din acest set (numărul său de elemente).
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);
}
}
Ieșirea este:
Exemplul 2. Adăugarea unui duplicat în LinkedHashSet
Să punem din nou în LinkedHashSet 7 elemente cu nume de partituri muzicale și să punem un element nou care este același cu unul dintre elementele plasate înainte.
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);
}
}
Ieșirea programului este aici:
Exemplul 3. Eliminarea elementelor din LinkedHashSet
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);
}
}
Ieșirea programului este aici:
LinkedHashSet vs HashSet
Aceste două clase sunt rude apropiate. Cu toate acestea, în interiorul HashSet, folosește HashMap pentru a stoca obiecte, în timp ce LinkedHashSet folosește LinkedHashMap . Dacă nu trebuie să mențineți ordinea de inserare, dar trebuie să stocați obiecte unice, este mai potrivit să utilizați HashSet . Dacă trebuie să mențineți ordinea de inserare a elementelor, atunci LinkedHashSet este alegerea dvs. Performanța LinkedHashSet este puțin mai lentă decât HashSet , deoarece LinkedHashSet utilizează LinkedList intern pentru a menține ordinea de inserare a elementelor. Să avem un exemplu:
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);
}
}
Rezultatul programului este:
Utilizarea Java LinkedHashSet în aplicațiile din lumea reală
Deoarece LinkedHashSet vă permite să verificați rapid existența unei intrări și, de asemenea, să stocheze o comandă, această colecție pare a fi destul de convenabilă pentru eliminarea duplicatelor dintr-o listă. Sau, de exemplu, rezolvarea unor probleme precum ultimul articol văzut recent din geanta mea. Sau, vă amintiți un astfel de joc, Pokemon Go? LinkedHashSet poate stoca o listă de Pokemon pe care i-ai întâlnit și ordinea în care au apărut pe calea ta. În acest caz, Pokémonul „repetat” nu va mai fi adăugat la listă. Sau, de exemplu, o listă de șefi după nivel pe care i-ați întâlnit deja în orice joc cu niveluri. Sau istoria descoperirii corpurilor cosmice. LinkedHashSetvă permite să verificați rapid dacă un corp spațial este deja în listă sau nu și, dacă nu este acolo, adăugați-l în listă. Să luăm un exemplu de eliminare a duplicatelor.
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);
}
}
Ieșirea programului este aici:
GO TO FULL VERSION