Σε αυτό το σεμινάριο, θα μάθουμε για την κλάση Java LinkedHashSet και τις μεθόδους της με τη βοήθεια παραδειγμάτων.
Η LinkedHashSet
κλάση του πλαισίου συλλογών Java παρέχει λειτουργίες τόσο της κατακερματισμένης όσο και της συνδεδεμένης δομής δεδομένων λίστας.
Υλοποιεί τη διεπαφή Set.
Τα στοιχεία LinkedHashSet
αποθηκεύονται σε πίνακες κατακερματισμού παρόμοιο με το HashSet.
Ωστόσο, τα συνδεδεμένα σύνολα κατακερματισμού διατηρούν μια λίστα διπλά συνδεδεμένων εσωτερικά για όλα τα στοιχεία της. Η συνδεδεμένη λίστα καθορίζει τη σειρά με την οποία τα στοιχεία εισάγονται σε κατακερματισμούς.
Δημιουργήστε ένα LinkedHashSet
Για να δημιουργήσουμε ένα συνδεδεμένο σετ κατακερματισμού, πρέπει java.util.LinkedHashSet
πρώτα να εισαγάγουμε το πακέτο.
Μόλις εισαγάγουμε το πακέτο, εδώ είναι πώς μπορούμε να δημιουργήσουμε συνδεδεμένα σύνολα κατακερματισμού στην Java.
// LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75);
Εδώ, δημιουργήσαμε ένα συνδεδεμένο σύνολο κατακερματισμού με όνομα.
Παρατηρήστε, το μέρος new LinkedHashSet(8, 0.75)
. Εδώ, η πρώτη παράμετρος είναι χωρητικότητα και η δεύτερη παράμετρος είναι loadFactor .
- Χωρητικότητα - Η χωρητικότητα αυτού του σετ κατακερματισμού είναι 8. Δηλαδή, μπορεί να αποθηκεύσει 8 στοιχεία.
- loadFactor - Ο συντελεστής φόρτωσης αυτού του συνόλου κατακερματισμού είναι 0,6. Αυτό σημαίνει, όποτε ο πίνακας κατακερματισμού συμπληρώνεται κατά 60%, τα στοιχεία μετακινούνται σε έναν νέο πίνακα κατακερματισμού διπλάσιου μεγέθους από τον αρχικό πίνακα κατακερματισμού.
Προεπιλεγμένη χωρητικότητα και συντελεστής φόρτωσης
Είναι δυνατό να δημιουργήσετε ένα συνδεδεμένο σετ κατακερματισμού χωρίς να ορίσετε τη χωρητικότητα και τον συντελεστή φόρτωσης. Για παράδειγμα,
// LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet();
Από προεπιλογή,
- η χωρητικότητα του συνδεδεμένου σετ κατακερματισμού θα είναι 16
- ο συντελεστής φορτίου θα είναι 0,75
Δημιουργία LinkedHashSet από άλλες συλλογές
Εδώ είναι πώς μπορούμε να δημιουργήσουμε ένα συνδεδεμένο σετ κατακερματισμού που περιέχει όλα τα στοιχεία άλλων συλλογών.
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); ) )
Παραγωγή
ArrayList: (2, 4) LinkedHashSet: (2, 4)
Μέθοδοι LinkedHashSet
Η LinkedHashSet
τάξη παρέχει μεθόδους που μας επιτρέπουν να εκτελούμε διάφορες λειτουργίες στο συνδεδεμένο σετ κατακερματισμού.
Εισαγωγή στοιχείων στο LinkedHashSet
add()
- εισάγει το καθορισμένο στοιχείο στο συνδεδεμένο σετ κατακερματισμούaddAll()
- εισάγει όλα τα στοιχεία της καθορισμένης συλλογής στο συνδεδεμένο σύνολο κατακερματισμού
Για παράδειγμα,
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); ) )
Παραγωγή
LinkedHashSet: (2, 4, 6) Νέο LinkedHashSet: (2, 4, 6, 5)
Πρόσβαση σε στοιχεία LinkedHashSet
Για πρόσβαση στα στοιχεία ενός συνδεδεμένου συνόλου κατακερματισμού, μπορούμε να χρησιμοποιήσουμε τη iterator()
μέθοδο. Για να χρησιμοποιήσετε αυτήν τη μέθοδο, πρέπει να εισαγάγετε το java.util.Iterator
πακέτο. Για παράδειγμα,
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(", "); ) ) )
Παραγωγή
LinkedHashSet: (2, 5, 6) LinkedHashSet χρησιμοποιώντας Iterator: 2, 5, 6,
Σημείωση :
hasNext()
επιστρέφειtrue
εάν υπάρχει ένα επόμενο στοιχείο στο συνδεδεμένο σετ κατακερματισμούnext()
επιστρέφει το επόμενο στοιχείο στο συνδεδεμένο σετ κατακερματισμού
Κατάργηση στοιχείων από το HashSet
remove()
- αφαιρεί το καθορισμένο στοιχείο από το συνδεδεμένο σετ κατακερματισμούremoveAll()
- αφαιρεί όλα τα στοιχεία από το συνδεδεμένο σετ κατακερματισμού
Για παράδειγμα,
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); ) )
Παραγωγή
LinkedHashSet: (2, 5, 6) Καταργείται το 5; αλήθεια Καταργούνται όλα τα στοιχεία; αληθής
Ορίστε λειτουργίες
Οι διάφορες μέθοδοι της LinkedHashSet
τάξης μπορούν επίσης να χρησιμοποιηθούν για την εκτέλεση διαφόρων λειτουργιών σετ.
Ένωση συνόλων
Δύο εκτελούν την ένωση μεταξύ δύο σετ, μπορούμε να χρησιμοποιήσουμε τη addAll()
μέθοδο. Για παράδειγμα,
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); ) )
Παραγωγή
LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Η ένωση είναι: (1, 3, 2, 4)
Διασταύρωση συνόλων
To perform the intersection between two sets, we can use the retainAll()
method. For example
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); ) )
Output
LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Intersection is: (2)
Difference of Sets
To calculate the difference between the two sets, we can use the removeAll()
method. For example,
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); ) )
Output
LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Difference: (2)
Subset
To check if a set is a subset of another set or not, we can use the containsAll()
method. For example,
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); ) )
Output
LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Is LinkedHashSet2 is a subset of LinkedHashSet1? true
Other Methods Of LinkedHashSet
Method | Description |
---|---|
clone() | Creates a copy of the LinkedHashSet |
contains() | Searches the LinkedHashSet for the specified element and returns a boolean result |
isEmpty() | Checks if the LinkedHashSet is empty |
size() | Returns the size of the LinkedHashSet |
clear() | Removes all the elements from the 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
τάξη εφαρμόζει τηSortedSet
διεπαφή. Γι 'αυτό τα στοιχεία σε ένα σύνολο δέντρων ταξινομούνται. Ωστόσο, ηLinkedHashSet
τάξη διατηρεί μόνο τη σειρά εισαγωγής των στοιχείων της. - Το Α
TreeSet
είναι συνήθως πιο αργό από τοLinkedHashSet
. Είναι επειδή κάθε φορά που ένα στοιχείο προστίθεται σε έναTreeSet
, πρέπει να εκτελεί τη διαδικασία ταξινόμησης. LinkedHashSet
επιτρέπει την εισαγωγή μηδενικών τιμών. Ωστόσο, δεν είναι δυνατή η εισαγωγή μηδενικής τιμήςTreeSet
.