Wat is Javaset
Set is een interface van het Java Collection Framework, maar Set is geen geordende verzameling, in tegenstelling tot List . Dat betekent dat Java Set- elementen zonder een bepaalde volgorde worden bewaard. Er is dus geen controle over de positie waar u een element kunt invoegen. Je hebt ook geen toegang tot elementen via hun index. Wiskundig gezien is een set een verzameling unieke elementen. In feite is dit een ongeordende verzameling (ongeordende verzameling), waarin identieke elementen niet kunnen worden opgeslagen. Als u met opzet een gedupliceerd element aan een Set toevoegt , wordt deze actie genegeerd en verandert de Set niet. Het is echter toegestaan om er één nulelement in op te slaan.Stel implementaties in
Java Set is een interface, dus u moet een van de implementaties ervan gebruiken om objecten te maken. Dit zijn HashSet , TreeSet en LinkedHashSet . In Set s wordt elk element in slechts één instantie opgeslagen en verschillende implementaties van Set gebruiken een andere volgorde voor het opslaan van elementen. In een HashSet wordt de volgorde van elementen bepaald door een complex algoritme. Als opslagvolgorde belangrijk voor u is, gebruik dan een TreeSet- container, waarin objecten in oplopende volgorde in vergelijkingsvolgorde worden gesorteerd, of een LinkedHashSet, waarin elementen naast volgorde worden opgeslagen. Sets worden vaak gebruikt voor het testen van lidmaatschap, zodat u gemakkelijk kunt controleren of een object tot een bepaalde set behoort, dus in de praktijk wordt meestal gekozen voor een HashSet- implementatie die is geoptimaliseerd voor snel opzoeken. HashSet is een verzameling die hun hash-waarden gebruikt die worden geretourneerd door de methode hashCode() om elementen intern op te slaan. Dat wil zeggen, in de HashSet<E> wordt het object HashMap<E, Object> opgeslagen, waarin de waarden van de HashSet als sleutels worden opgeslagen. Met behulp van hash-codes kunt u snel elementen uit een set zoeken, toevoegen en verwijderen . LinkedHashSet is een HashSetdie ook elementen opslaat in een gekoppelde lijst. Een normale HashSet handhaaft de volgorde van elementen niet. Ten eerste bestaat het officieel gewoon niet, en ten tweede kan zelfs de interne orde drastisch veranderen als er maar één element wordt toegevoegd. En u kunt een iterator van LinkedHashSet krijgen en deze gebruiken om alle elementen te doorlopen in de exacte volgorde waarin ze aan de LinkedHashSet zijn toegevoegd . Niet vaak, maar soms kan het heel nodig zijn. Een TreeSet is een verzameling die elementen opslaat als een op waarde geordende boom. Binnen de TreeSet<E> bevindt zich een TreeMap<E, Object> die al deze waarden opslaat. En deze TreeMapgebruikt een rood-zwart gebalanceerde binaire boom om elementen op te slaan. Daarom heeft het zeer snelle add() , remove() , contain() operaties.Maak een ingesteld object
Om een set- object te maken, kunt u een van de volgende formulieren gebruiken:
Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
Hier is een eenvoudig voorbeeld, waarbij we 2 Set s, HashSet en LinkedHashSet maken , en aan elk 5 elementen toevoegen. Hiervoor kunnen we de methode add() gebruiken .
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);
}
}
Hier is de uitvoer van het programma:
Java Set-methoden
Hier zijn enkele van Java Set belangrijke methoden:-
booleaanse toevoeging(E e) . Voegt het opgegeven element toe aan de set als het nog niet aanwezig is (optionele bewerking).
-
booleaanse verwijdering(Object o) . Verwijdert het opgegeven element uit deze set als het aanwezig is (optionele bewerking).
-
boolean removeAll(Collectie c) . Verwijdert uit deze set alle elementen die zijn opgenomen in de opgegeven verzameling (optionele bewerking).
-
boolean retainAll(Collectie c) . Behoudt alleen de elementen in deze set die deel uitmaken van de opgegeven verzameling (optionele bewerking).
-
nietig duidelijk() . Verwijdert alle elementen uit de set.
-
Iterator-iterator() . Retourneert een iterator over de elementen in deze set.
-
int-grootte() . het wordt gebruikt om het aantal elementen in de set te krijgen.
-
boolean isEmpty() . om te controleren of Set leeg is of niet.
-
boolean bevat(Object o) . Retourneert waar als deze set het opgegeven element bevat.
-
Iterator-iterator() . Retourneert een iterator over de elementen in deze set. De elementen worden in willekeurige volgorde geretourneerd.
-
Object[] toArray() . Retourneert een matrix die alle elementen in deze set bevat. Als deze set enige garantie geeft over de volgorde van de elementen die worden geretourneerd door de iterator, moet deze methode de elementen in dezelfde volgorde retourneren.
Voorbeeld van Java Set hoofdbewerkingen
In dit voorbeeld maken we een reeks tekenreeksen en geven deze vervolgens door aan mySet met behulp van de bewerking Arrays.asList . Vervolgens verwijderen we nog een paar elementen en voegen we er nog een paar toe. In dit geval bestaat een van de elementen in de set al: deze wordt niet toegevoegd. We zullen ook de bewerkingen proberen van het controleren op leegte isEmpty() , het bepalen van de grootte van de set size() en het wissen van de set van alle elementen 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());
}
}
De uitvoer van het programma is hier:
Voorbeeld met LinkedHashSet en ingesteld op Array
Laten we een ander programma schrijven. Daarin zullen we een set maken op basis van de LinkedHashSet , er elementen aan toevoegen en de set vervolgens converteren naar een array.
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]);
}
}
Hier is de uitvoer van het programma:
Voorbeeld geven met iterator
Laten we een set maken, deze vervolgens afdrukken met een iterator en vervolgens alle even getallen eruit verwijderen, ook met behulp van een 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);
}
}
De uitvoer van het programma is hier:
Voorbeeld met TreeSet
Als sorteren belangrijk voor je is, gebruik dan de TreeSet- implementatie. In dit korte voorbeeld vullen we de set in met de namen van vrienden, net als in de vorige voorbeelden. In een gesorteerde TreeSet worden de elementen echter onmiddellijk in gesorteerde volgorde geschreven. In dit geval worden de namen alfabetisch weergegeven.
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);
}
De uitvoer is:
Korte conclusies
-
De Java Set- interface maakt deel uit van het Java Collections Framework.
-
Geïmplementeerde klassen: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet .
-
De meest populaire Set- implementaties zijn HashSet , LinkedHashSet en TreeSet .
-
De volgorde van HashSet- elementen wordt bepaald door een complex algoritme. Als opslagvolgorde belangrijk voor je is, gebruik dan een TreeSet- container, waarin objecten in oplopende volgorde in vergelijkingsvolgorde worden gesorteerd, of een LinkedHashSet , waarin elementen in aanvullende volgorde worden opgeslagen.
-
Meestal worden sets gebruikt om het lidmaatschap te testen. Dat wil zeggen om te controleren of een object in wiskundige zin tot een bepaalde verzameling behoort. Dus van alle Set- implementaties in de praktijk wordt meestal gekozen voor HashSet . Deze implementatie is geoptimaliseerd voor snel zoeken.
-
U kunt geen dubbele elementen aan een set toevoegen, dus u kunt implementaties van de Set- interface gebruiken om unieke elementen op te slaan.
-
Met Set kunt u slechts één null-element toevoegen.
-
Set is geen lijst en ondersteunt geen indexen of posities van zijn elementen.
GO TO FULL VERSION