Ce este Java Set
Set este o interfață din cadrul Java Collection Framework, dar Set nu este o colecție ordonată, spre deosebire de List . Aceasta înseamnă că elementele Java Set sunt păstrate fără o anumită ordine. Deci nu există control asupra poziției în care puteți insera un element. De asemenea, nu puteți accesa elemente după indexul lor. Din punct de vedere matematic, un set este o colecție de elemente unice. De fapt, aceasta este o Colecție neordonată (Colecție neordonată), în care elemente identice nu pot fi stocate. Dacă adăugați în mod intenționat un element duplicat la un set , această acțiune va fi ignorată și setul nu se va modifica. Cu toate acestea, este permisă stocarea unui element nul în el.Setați implementări
Java Set este o interfață, așa că trebuie să utilizați una dintre implementările sale pentru a crea obiecte. Acestea sunt HashSet , TreeSet și LinkedHashSet . În Set s, fiecare element este stocat într-o singură instanță, iar implementările diferite ale Set folosesc o ordine diferită pentru stocarea elementelor. Într-un HashSet , ordinea elementelor este determinată de un algoritm complex. Dacă ordinea de stocare este importantă pentru dvs., utilizați un container TreeSet , care stochează obiectele sortate în ordine crescătoare în ordine de comparație sau un LinkedHashSet, care stochează elemente în ordine suplimentară. Seturile sunt adesea folosite pentru testarea apartenenței, astfel încât să puteți verifica cu ușurință dacă un obiect aparține unui set dat, așa că, în practică, este de obicei aleasă o implementare HashSet care este optimizată pentru căutare rapidă. HashSet este o colecție care își folosește valorile hash returnate de metoda hashCode() pentru a stoca elemente în interior. Adică, în interiorul HashSet<E> , este stocat obiectul HashMap<E, Object> , care stochează valorile HashSet-ului ca chei. Utilizarea codurilor hash vă permite să căutați, să adăugați și să eliminați rapid elemente dintr-un set . LinkedHashSet este un HashSetcare stochează și elemente într-o listă legată. Un HashSet normal nu menține ordinea elementelor. În primul rând, oficial pur și simplu nu există și, în al doilea rând, chiar și ordinea internă se poate schimba dramatic atunci când este adăugat un singur element. Și puteți obține un iterator de la LinkedHashSet și îl puteți folosi pentru a parcurge toate elementele în ordinea exactă în care au fost adăugate la LinkedHashSet . Nu des, dar uneori poate fi foarte necesar. Un TreeSet este o colecție care stochează elemente ca un arbore ordonat în funcție de valori. În interiorul TreeSet<E> se află un TreeMap<E, Object> care stochează toate aceste valori. Și acest TreeMapfolosește un arbore binar echilibrat roșu-negru pentru a stoca elemente. Prin urmare, are operații foarte rapide add() , remove() , contains() .Creați un obiect set
Pentru a crea un obiect set , puteți folosi unul dintre următoarele forme:
Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
Iată un exemplu simplu, în care creăm 2 Set s, HashSet și LinkedHashSet și adăugăm în fiecare pentru 5 elemente. Putem folosi metoda add() pentru aceasta.
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
public class HashSetTest {
public static void main(String[] args) {
Set mySet = new HashSet();
Set mySet2 = new LinkedHashSet();
//adding some string elements
mySet.add("Stuart");
mySet.add("Alex");
mySet.add("Johnny");
mySet.add("Igor");
mySet.add("Bel");
System.out.println(mySet);
mySet2.add("Stuart");
mySet2.add("Alex");
mySet2.add("Johnny");
mySet2.add("Igor");
mySet2.add("Bel");
System.out.println(mySet2);
}
}
Iată rezultatul programului:
Metode de set Java
Iată câteva dintre metodele importante ale Java Set :-
adaugă boolean(E e) . Adaugă elementul specificat la set dacă nu este deja prezent (operație opțională).
-
boolean remove(Obiect o) . Îndepărtează elementul specificat din acest set dacă este prezent (operație opțională).
-
boolean removeAll(Colecția c) . Îndepărtează din acest set toate elementele sale care sunt conținute în colecția specificată (operație opțională).
-
boolean retainAll(Colecția c) . Reține doar elementele din acest set care sunt conținute în colecția specificată (operație opțională).
-
void clear() . Îndepărtează toate elementele din set.
-
Iterator iterator() . Returnează un iterator peste elementele din acest set.
-
int dimensiune() . este folosit pentru a obține numărul de elemente din Set.
-
boolean isEmpty() . pentru a verifica dacă Set este gol sau nu.
-
boolean conține(Obiect o) . Returnează adevărat dacă acest set conține elementul specificat.
-
Iterator iterator() . Returnează un iterator peste elementele din acest set. Elementele sunt returnate în nicio ordine anume.
-
Object[] toArray() . Returnează o matrice care conține toate elementele din acest set. Dacă acest set oferă garanții cu privire la ordinea în care elementele sale sunt returnate de iteratorul său, această metodă trebuie să returneze elementele în aceeași ordine.
Exemplu de operații principale Java Set
În acest exemplu, creăm o matrice de șiruri de caractere și apoi o transmitem către mySet folosind operația Arrays.asList . Apoi mai eliminăm câteva elemente și mai adăugăm câteva. În acest caz, unul dintre elementele din set există deja: nu va fi adăugat. Vom încerca, de asemenea, operațiunile de verificare a golului isEmpty() , determinând dimensiunea setului size() și ștergând setul de toate elementele clear() .
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class HashSetTest2 {
public static void main(String[] args) {
//creating a string Array with some names
String [] friends = {"Stuart", "Ivy", "Johnny", "Alex", "Igor", "Tanya"};
//creating a new set and adding elements from string array into it
Set<String> mySet = new HashSet<>(Arrays.asList(friends));
System.out.println(mySet);
//removing two elements from the set
mySet.remove("Igor");
mySet.remove("Stuart");
System.out.println(mySet);
//adding 2 new Elements into set
mySet.add("Dasha");
mySet.add("Alex"); //it's second Alex, can't be added
System.out.println(mySet);
//cheking the size of mySet
int size = mySet.size();
System.out.println("The quantity of set's elements = " + size);
//Checking if the set is empty
System.out.println("Is mySet empty? " + mySet.isEmpty());
//checking if some elements are in set
System.out.println("Is Igor in set? " + mySet.contains("Igor"));
System.out.println("Is Johnny in set? "+ mySet.contains("Johnny"));
//deleting all elements from the set
mySet.clear();
System.out.println("Is mySet empty now? " + mySet.isEmpty());
}
}
Ieșirea programului este aici:
Exemplu cu LinkedHashSet și setat la Array
Să scriem alt program. În el, vom crea un set bazat pe LinkedHashSet , vom adăuga elemente la acesta și apoi vom converti setul într-o matrice.
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSet3 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("C");
set.add("D");
set.add("E");
set.add("F");
set.add("G");
set.add("A");
set.add("B");
System.out.println(set);
set.remove("F");// removing an element from our set
set.remove("C sharp");//trying to remove element that isn't in set
System.out.println(set.remove("C sharp"));
System.out.println("Print our set with elements removed: ");
System.out.println(set);
//set to array
String strArray[] = set.toArray(new String[set.size()]);
System.out.println("New Array from set: ");
System.out.println(Arrays.toString(strArray));
System.out.println(strArray[0]);
}
}
Iată rezultatul programului:
Setați exemplul cu iteratorul
Să creăm un set, apoi să-l tipărim folosind un iterator și apoi să eliminăm toate numerele pare din el, folosind tot un iterator.
import java.util.*;
public class SetTest5
{
public static void main(String[] args)
{
Set<Integer> mySet = new HashSe<>();
for(int i = 0; i < 10; i++)
mySet.add(i);
Iterator iterator = mySet.iterator();
//simple iteration
while(iterator.hasNext()){
int i = (int) iterator.next();
}
System.out.println(" " + mySet);
//modification of mySet using iterator - removing all even numbers
iterator = mySet.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 == 0) iterator.remove();
}
System.out.println(mySet);
}
}
Ieșirea programului este aici:
Exemplu cu TreeSet
Dacă sortarea este importantă pentru dvs., atunci utilizați implementarea TreeSet . În acest scurt exemplu, vom completa setul cu numele prietenilor, ca în exemplele anterioare. Cu toate acestea, într-un TreeSet sortat , elementele vor fi imediat scrise în ordine sortată. În acest caz, numele vor fi afișate în ordine alfabetică.
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
Set mySet = new TreeSet<>();
mySet.add("Stuart");
mySet.add("Alex");
mySet.add("Johnny");
mySet.add("Igor");
mySet.add("Bel");
System.out.println(mySet);
}
Ieșirea este:
Concluzii scurte
-
Interfața Java Set face parte din cadrul Java Collections Framework.
-
Clase implementate: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet .
-
Cele mai populare implementări Set sunt HashSet , LinkedHashSet și TreeSet .
-
Ordinea elementelor HashSet este determinată de un algoritm complex. Dacă ordinea de stocare este importantă pentru dvs., utilizați un container TreeSet , care stochează obiectele sortate crescător în ordine de comparație, sau un LinkedHashSet , care stochează elemente în ordine suplimentară.
-
Cel mai adesea, seturile sunt folosite pentru a testa calitatea de membru. Adică pentru a verifica dacă un obiect aparține unei mulțimi date în sens matematic. Deci, cel mai adesea dintre toate implementările Set în practică, HashSet este de obicei ales. Această implementare este optimizată pentru căutare rapidă.
-
Nu puteți adăuga elemente duplicate la un set, așa că puteți utiliza implementări ale interfeței Set pentru a stoca elemente unice.
-
Set vă permite să adăugați un singur element nul.
-
Set nu este o listă și nu acceptă indici sau poziții ale elementelor sale.
GO TO FULL VERSION