Java LinkedHashSet

I den här handledningen lär vi oss om Java LinkedHashSet-klassen och dess metoder med hjälp av exempel.

Den LinkedHashSetklass av samlingarna ram Java ger funktioner för både Hashtable och länkad lista datastrukturen.

Den implementerar Set-gränssnittet.

Element av LinkedHashSetlagras i hashtabeller som liknar HashSet.

Länkade hashuppsättningar håller dock en dubbelt länkad lista internt för alla dess element. Den länkade listan definierar i vilken ordning element infogas i hashtabeller.

Skapa en LinkedHashSet

För att skapa en länkad hashuppsättning måste vi först importera java.util.LinkedHashSetpaketet.

När vi har importerat paketet, här är hur vi kan skapa länkade hashuppsättningar i Java.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Här har vi skapat en länkad hashuppsättning med namnen.

Lägg märke till, delen new LinkedHashSet(8, 0.75). Här är den första parametern kapacitet och den andra parametern är loadFactor .

  • Kapacitet - Kapaciteten för denna hashuppsättning är 8. Det betyder att den kan lagra 8 element.
  • loadFactor - Lastfaktorn för denna hashuppsättning är 0,6. Detta betyder att när vår hash-tabell fylls med 60% flyttas elementen till en ny hash-tabell med dubbelt så stor som den ursprungliga hash-tabellen.

Standardkapacitet och lastfaktor

Det är möjligt att skapa en länkad hashuppsättning utan att definiera dess kapacitet och belastningsfaktor. Till exempel,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

Som standard,

  • kapaciteten för den länkade hashuppsättningen blir 16
  • belastningsfaktorn blir 0,75

Skapa LinkedHashSet från andra samlingar

Så här kan vi skapa en länkad hashuppsättning som innehåller alla element i andra samlingar.

 import java.util.LinkedHashSet; import java.util.ArrayList; class Main ( public static void main(String() args) ( // Creating an arrayList of even numbers ArrayList evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) ) 

Produktion

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Metoder för LinkedHashSet

I LinkedHashSetklassen innehåller metoder som tillåter oss att utföra olika operationer på den länkade hash set.

Infoga element i LinkedHashSet

  • add() - infogar det angivna elementet i den länkade hashuppsättningen
  • addAll() - infogar alla element i den angivna samlingen i den länkade hashuppsättningen

Till exempel,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumber = new LinkedHashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet numbers = new LinkedHashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); ) ) 

Produktion

 LinkedHashSet: (2, 4, 6) Ny LinkedHashSet: (2, 4, 6, 5) 

Åtkomst till LinkedHashSet-element

För att komma åt elementen i en länkad hashuppsättning kan vi använda iterator()metoden. För att kunna använda den här metoden måste vi importera java.util.Iteratorpaketet. Till exempel,

 import java.util.LinkedHashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Calling the iterator() method Iterator iterate = numbers.iterator(); System.out.print("LinkedHashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Produktion

 LinkedHashSet: (2, 5, 6) LinkedHashSet med Iterator: 2, 5, 6, 

Obs :

  • hasNext()returnerar trueom det finns ett nästa element i den länkade hashuppsättningen
  • next() returnerar nästa element i den länkade hashuppsättningen

Ta bort element från HashSet

  • remove() - tar bort det angivna elementet från den länkade hashuppsättningen
  • removeAll() - tar bort alla element från den länkade hashuppsättningen

Till exempel,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Using the remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) ) 

Produktion

LinkedHashSet: (2, 5, 6) Är 5 borttagen? true Är alla element borttagna? Sann

Ställ in funktioner

De olika metoderna i LinkedHashSetklassen kan också användas för att utföra olika uppsättningsoperationer.

Union of Sets

Två utför kopplingen mellan två uppsättningar, vi kan använda addAll()metoden. Till exempel,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) ) 

Produktion

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Unionen är: (1, 3, 2, 4) 

Korsning av uppsättningar

För att utföra korsningen mellan två uppsättningar kan vi använda retainAll()metoden. Till exempel

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Produktion

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Korsningen är: (2) 

Skillnad mellan uppsättningar

För att beräkna skillnaden mellan de två uppsättningarna kan vi använda removeAll()metoden. Till exempel,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet oddNumbers = new LinkedHashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Difference between LinkedHashSet1 and LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Produktion

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Skillnad: (2) 

Delmängd

För att kontrollera om en uppsättning är en delmängd av en annan uppsättning eller inte kan vi använda containsAll()metoden. Till exempel,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); ) ) 

Produktion

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Är LinkedHashSet2 en delmängd av LinkedHashSet1? Sann

Andra metoder för LinkedHashSet

Metod Beskrivning
clone() Skapar en kopia av LinkedHashSet
contains() Söker LinkedHashSetefter det angivna elementet och returnerar ett booleskt resultat
isEmpty() Kontrollerar om den LinkedHashSetär tom
size() Returnerar storleken på LinkedHashSet
clear() Tar bort alla element från LinkedHashSet

To learn more about LinkedHashSet methods, visit Java LinkedHashSet (official Java documentation).

LinkedHashSet Vs. HashSet

Both LinkedHashSet and HashSet implements the Set interface. However, there exist some differences between them.

  • LinkedHashSet maintains a linked list internally. Due to this, it maintains the insertion order of its elements.
  • The LinkedHashSet class requires more storage than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • Den TreeSetklass implementerar SortedSetgränssnittet. Därför sorteras element i en träduppsättning. Emellertid den LinkedHashSetenda klassen bibehåller ings ordning av dess beståndsdelar.
  • A TreeSetär vanligtvis långsammare än a LinkedHashSet. Det beror på att varje gång ett element läggs till i a TreeSetmåste det utföra sorteringsoperationen.
  • LinkedHashSettillåter infogning av nollvärden. Vi kan dock inte infoga ett nullvärde till TreeSet.

Intressanta artiklar...