Tässä opetusohjelmassa opitaan Java LinkedHashSet -luokasta ja sen menetelmistä esimerkkien avulla.
LinkedHashSet
Luokka Java kokoelmien kehys tarjoaa toimintoja sekä hashtable ja linkitetyn listadatarakennetta.
Se toteuttaa Set-käyttöliittymän.
Elementit LinkedHashSet
tallennetaan hash-taulukoihin, jotka ovat samanlaisia kuin HashSet.
Linkitetyt hajautusjoukot ylläpitävät kuitenkin kaksinkertaisesti linkitettyä luetteloa sisäisesti kaikille sen elementeille. Linkitetty luettelo määrittää järjestyksen, jossa elementit lisätään hash-taulukoihin.
Luo LinkedHashSet
Linkitetyn hajautusjoukon luomiseksi meidän on java.util.LinkedHashSet
ensin tuotava paketti.
Kun tuot paketin, voimme luoda näin linkitettyjä hash-sarjoja Java-sovelluksessa.
// LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75);
Tässä olemme luoneet linkitetyn hajautusjoukon nimeltä numerot.
Huomaa, osa new LinkedHashSet(8, 0.75)
. Ensimmäinen parametri on kapasiteetti ja toinen parametri loadFactor .
- kapasiteetti - Tämän hajautusjoukon kapasiteetti on 8. Tämä tarkoittaa, että se voi tallentaa 8 elementtiä.
- loadFactor - Tämän hajautusjoukon kuormituskerroin on 0,6. Tämä tarkoittaa, että aina kun hash-taulukko täytetään 60%, elementit siirretään uuteen hash-taulukkoon, joka on kaksinkertainen alkuperäisen hash-taulukon kokoon nähden.
Oletuskapasiteetti ja kuormituskerroin
On mahdollista luoda linkitetty hajautusjoukko määrittelemättä sen kapasiteettia ja kuormituskerrointa. Esimerkiksi,
// LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet();
Oletuksena,
- linkitetyn hajautusjoukon kapasiteetti on 16
- kuormituskerroin on 0,75
LinkedHashSetin luominen muista kokoelmista
Näin voimme luoda linkitetyn hajautusjoukon, joka sisältää kaikki muiden kokoelmien elementit.
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); ) )
Tuotos
ArrayList: (2, 4) LinkedHashSet: (2, 4)
LinkedHashSetin menetelmät
LinkedHashSet
Luokan tarjoaa menetelmiä, joiden avulla voimme tehdä erilaisia operaatioita linkitetty hash asetettu.
Lisää elementit LinkedHashSetiin
add()
- lisää määritetyn elementin linkitettyyn hajautusjoukkoonaddAll()
- lisää kaikki määritetyn kokoelman elementit linkitettyyn hajautusjoukkoon
Esimerkiksi,
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); ) )
Tuotos
LinkedHashSet: (2, 4, 6) Uusi LinkedHashSet: (2, 4, 6, 5)
Käytä LinkedHashSet-elementtejä
Voit käyttää linkitetyn hajautusjoukon elementtejä iterator()
menetelmällä. Tämän menetelmän käyttämiseksi meidän on tuotava java.util.Iterator
paketti. Esimerkiksi,
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(", "); ) ) )
Tuotos
LinkedHashSet: (2, 5, 6) LinkedHashSet käyttämällä Iteratoria: 2, 5, 6,
Huomaa :
hasNext()
palauttaa,true
jos linkitetyssä hajautusjoukossa on seuraava elementtinext()
palauttaa linkitetyn hajautusjoukon seuraavan elementin
Poista elementit HashSetistä
remove()
- poistaa määritetyn elementin linkitetystä hajautusjoukostaremoveAll()
- poistaa kaikki elementit linkitetystä hajautusjoukosta
Esimerkiksi,
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); ) )
Tuotos
LinkedHashSet: (2, 5, 6) Poistetaanko 5? true Poistetaanko kaikki elementit? totta
Aseta toiminnot
LinkedHashSet
Luokan eri menetelmiä voidaan käyttää myös erilaisten joukkooperaatioiden suorittamiseen.
Sarjojen liitto
Kaksi suorittaa liitoksen kahden sarjan välillä, voimme käyttää addAll()
menetelmää. Esimerkiksi,
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); ) )
Tuotos
LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Unioni on: (1, 3, 2, 4)
Joukkojen leikkauspiste
Kahden ryhmän leikkauksen suorittamiseksi voimme käyttää retainAll()
menetelmää. Esimerkiksi
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); ) )
Tuotos
LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Risteys on: (2)
Sarjojen ero
Kahden ryhmän eron laskemiseksi voimme käyttää removeAll()
menetelmää. Esimerkiksi,
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); ) )
Tuotos
LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Ero: (2)
Alajoukko
Voit tarkistaa, onko joukko toisen joukon osajoukko vai ei, voimme käyttää containsAll()
menetelmää. Esimerkiksi,
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); ) )
Tuotos
LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Onko LinkedHashSet2 LinkedHashSet1: n osajoukko? totta
Muut LinkedHashSet-menetelmät
Menetelmä | Kuvaus |
---|---|
clone() | Luo kopion LinkedHashSet |
contains() | Hakee LinkedHashSet määritetyn elementin ja palauttaa loogisen tuloksen |
isEmpty() | Tarkistaa onko LinkedHashSet tyhjä |
size() | Palauttaa LinkedHashSet |
clear() | Poistaa kaikki elementit 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 thanHashSet
. This is becauseLinkedHashSet
maintains linked lists internally. - The performance of
LinkedHashSet
is slower thanHashSet
. It is because of linked lists present inLinkedHashSet
.
LinkedHashSet Vs. TreeSet
Here are the major differences between LinkedHashSet
and TreeSet
:
TreeSet
Luokka toteuttaaSortedSet
rajapinnan. Siksi puupaketin elementit lajitellaan.LinkedHashSet
Luokka ylläpitää kuitenkin vain sen elementtien lisäysjärjestystä.- A
TreeSet
on yleensä hitaampi kuin aLinkedHashSet
. Se johtuu siitä, että aina kun elementti lisätään a:TreeSet
han, sen on suoritettava lajittelutoiminto. LinkedHashSet
sallii nolla-arvojen lisäämisen. Emme kuitenkaan voi lisätä nolla-arvoa kohtaanTreeSet
.