Hvad er indstillet i Java
Lad os kort huske, at sæt- grænsefladen definerer et sæt (sæt). Det udvider Collection og definerer adfærden for samlinger, der ikke tillader duplikerede elementer. Således returnerer add() metoden false , hvis der gøres et forsøg på at tilføje et dubletelement til sættet. Grænsefladen definerer ikke sine egne yderligere metoder. Set - grænsefladen tager sig af det unikke ved lagrede objekter, unikhed bestemmes af implementeringen af equals()- metoden. Derfor, hvis objekter af den oprettede klasse vil blive tilføjet til sættet , er det ønskeligt at tilsidesætte equals()- metoden.LinkedHashSet klasse
Før vi taler om LinkedHashSet- klassen, skal vi nævne dens nære slægtning, HashSet- klassen. HashSet implementerer Set- grænsefladen. Det opretter en samling, der gemmer elementerne i en hash-tabel. Elementerne i en hash-tabel gemmes som nøgleværdi-par. Nøglen angiver cellen (eller segmentet), der skal gemme værdien. Indholdet af nøglen bruges til at bestemme en unik værdi kaldet en hash-kode. Vi kan tænke på en hash-kode som en objektidentifikator, selvom den ikke behøver at være unik. Denne hash-kode fungerer også som et indeks, hvortil de data, der er knyttet til nøglen, gemmes. LinkedHashSet Java-klassen udvider HashSet uden at tilføje nye metoder.LinkedHashSet giver dig mulighed for hurtigt at kontrollere eksistensen af en post, ligesom HashSet , men indeholder en ordnet liste indeni. Det betyder, at den gemmer elementernes indsættelsesrækkefølge. Med andre ord vedligeholder LinkedHashSet en sammenkædet liste over sæt-elementer i den rækkefølge, de blev indsat. Dette tillader ordnet iteration af indsættelse i et sæt. Men dette får LinkedHashSet- klassen til at udføre operationer længere end HashSet- klassen.Vigtige funktioner i LinkedHashSet
-
Vi kan kun gemme unikke elementer i et LinkedHashSet
-
LinketHashSet lader os udtrække elementer i samme rækkefølge, som vi indsætter
-
LinkedHashSet er ikke synkroniseret
-
LinkedHashSet tillader lagring af null-elementer
-
LinkedHashSet bruger en hash-teknik til at gemme elementer ved et specificeret indeks baseret på en hash-kode
LinkedHashSet-metoder
Ud over de metoder, der er arvet fra dets overordnede klasser, definerer HashSet følgende metoder:-
boolean add(Object o) tilføjer det angivne element til dette sæt, hvis det ikke allerede er til stede.
-
void clear() fjerner alle elementer fra dette sæt.
-
Object clone() returnerer en overfladisk kopi af denne LinkedHashSet- instans: selve elementerne klones ikke.
-
boolean contains(Object o) returnerer sand, hvis dette sæt indeholder det angivne element.
-
boolean isEmpty() returnerer sand , hvis dette sæt ikke indeholder nogen elementer.
-
Iterator iterator() returnerer en iterator over elementerne i dette sæt.
-
boolean remove(Object o) fjerner det angivne element fra dette sæt, hvis det findes.
-
int size() returnerer antallet af elementer i dette sæt (dets antal elementer).
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);
}
}
Udgangen er:

Eksempel 2. Tilføjelse af en dublet i LinkedHashSet
Lad os indsætte vores LinkedHashSet 7 elementer med navne på noder igen og sætte et nyt element, der er det samme som et af elementerne placeret før.
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);
}
}
Resultatet af programmet er her:
Eksempel 3. Fjernelse af elementer fra 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);
}
}
Resultatet af programmet er her:
LinkedHashSet vs HashSet
Disse to klasser er nære slægtninge. Men inde i HashSet bruger den HashMap til at gemme objekter, mens LinkedHashSet bruger LinkedHashMap . Hvis du ikke har brug for at vedligeholde indsættelsesrækkefølgen, men skal gemme unikke objekter, er det mere hensigtsmæssigt at bruge HashSet . Hvis du har brug for at opretholde indsættelsesrækkefølgen af elementer, er LinkedHashSet dit valg. Ydeevnen af LinkedHashSet er en smule langsommere end HashSet , fordi LinkedHashSet bruger intern LinkedList til at opretholde indsættelsesrækkefølgen af elementer. Lad os få et eksempel:
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);
}
}
Resultatet af programmet er:
Brug af Java LinkedHashSet i applikationer fra den virkelige verden
Da LinkedHashSet giver dig mulighed for hurtigt at kontrollere eksistensen af en post og også gemmer ordre, ser denne samling ud til at være ret praktisk til at fjerne dubletter fra en liste. Eller for eksempel at løse problemer som det sidst sete element i min taske. Eller husker du sådan et spil, Pokemon Go? LinkedHashSet kan gemme en liste over Pokémon, du har stødt på, og den rækkefølge, de stødte på på din vej. I dette tilfælde vil den "gentagne" Pokémon ikke længere blive tilføjet til listen. Eller for eksempel en liste over chefer efter niveau, som du allerede har mødt i ethvert spil med niveauer. Eller historien om opdagelsen af kosmiske legemer. LinkedHashSetgiver dig mulighed for hurtigt at kontrollere, om et rumlegeme allerede er på listen eller ej, og hvis det ikke er der, så føje det til listen. Lad os tage et eksempel på at fjerne dubletter.
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);
}
}
Resultatet af programmet er her:
GO TO FULL VERSION