Java LinkedHashSet

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java LinkedHashSet và các phương thức của nó với sự trợ giúp của các ví dụ.

Các LinkedHashSetlớp học của khuôn khổ bộ sưu tập Java cung cấp các chức năng của cả hai Hashtable và cấu trúc dữ liệu danh sách liên kết.

Nó thực hiện giao diện Đặt .

Các phần tử của LinkedHashSetđược lưu trữ trong bảng băm tương tự như HashSet .

Tuy nhiên, các bộ băm được liên kết duy trì một danh sách được liên kết kép trong nội bộ cho tất cả các phần tử của nó. Danh sách liên kết xác định thứ tự các phần tử được chèn vào bảng băm.

Tạo LinkedHashSet

Để tạo một tập hợp băm được liên kết, java.util.LinkedHashSettrước tiên chúng ta phải nhập gói.

Sau khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo các bộ băm được liên kết trong Java.

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

Ở đây, chúng tôi đã tạo một tập hợp băm được liên kết có tên là các số .

Chú ý, phần new LinkedHashSet<>(8, 0.75). Ở đây, tham số đầu tiên là dung lượng và tham số thứ hai là loadFactor .

  • capacity – The capacity of this hash set is 8. Meaning, it can store 8 elements.
  • loadFactor – The load factor of this hash set is 0.6. This means, whenever our hash table is filled by 60%, the elements are moved to a new hash table of double the size of the original hash table.

Công suất mặc định và hệ số tải

Có thể tạo một tập hợp băm được liên kết mà không cần xác định dung lượng và hệ số tải của nó. Ví dụ,

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

Theo mặc định,

  • the capacity of the linked hash set will be 16
  • the load factor will be 0.75

Tạo LinkedHashSet từ các Bộ sưu tập khác

Đây là cách chúng ta có thể tạo một tập hợp băm được liên kết chứa tất cả các phần tử của các tập hợp khác.

import java.util.LinkedHashSet;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        // Creating an arrayList of even numbers
        ArrayList<Integer> evenNumbers = new ArrayList<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("ArrayList: " + evenNumbers);

        // Creating a LinkedHashSet from an ArrayList
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
        System.out.println("LinkedHashSet: " + numbers);
    }
}

Đầu ra

ArrayList: [2, 4]
LinkedHashSet: [2, 4]

Phương thức của LinkedHashSet

Các LinkedHashSetlớp học cung cấp phương pháp đó cho phép chúng tôi thực hiện các hoạt động khác nhau trên bộ băm liên kết.

Chèn các phần tử vào LinkedHashSet

  • add() – inserts the specified element to the linked hash set
  • addAll() – inserts all the elements of the specified collection to the linked hash set

Ví dụ,

import java.util.LinkedHashSet;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>();

        // Using add() method
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("LinkedHashSet: " + evenNumber);

        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        
        // Using addAll() method
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("New LinkedHashSet: " + numbers);
    }
}

Đầu ra

LinkedHashSet: [2, 4, 6]
New LinkedHashSet: [2, 4, 6, 5]

Truy cập các phần tử LinkedHashSet

Để truy cập các phần tử của một tập hợp băm được liên kết, chúng ta có thể sử dụng iterator()phương pháp. Để sử dụng phương pháp này, chúng ta phải nhập java.util.Iteratorgói. Ví dụ,

import java.util.LinkedHashSet;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("LinkedHashSet: " + numbers);

        // Calling the iterator() method
        Iterator<Integer> iterate = numbers.iterator();

        System.out.print("LinkedHashSet using Iterator: ");

        // Accessing elements
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Đầu ra

LinkedHashSet: [2, 5, 6]
LinkedHashSet using Iterator: 2, 5, 6,

Ghi chú :

  • hasNext() returns true if there is a next element in the linked hash set
  • next() returns the next element in the linked hash set

Xóa các phần tử khỏi HashSet

  • remove() – removes the specified element from the linked hash set
  • removeAll() – removes all the elements from the linked hash set

Ví dụ,

import java.util.LinkedHashSet;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> 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);
    }
}

Đầu ra

LinkedHashSet: [2, 5, 6]
Is 5 removed? true
Are all elements removed? true

Đặt hoạt động

Các phương thức khác nhau của LinkedHashSetlớp cũng có thể được sử dụng để thực hiện các hoạt động tập hợp khác nhau.

Liên hiệp các bộ

Hai thực hiện hợp nhất giữa hai tập hợp, chúng ta có thể sử dụng addAll()phương pháp này. Ví dụ,

import java.util.LinkedHashSet;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("LinkedHashSet1: " + evenNumbers);

        LinkedHashSet<Integer> 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);
    }
}

Đầu ra

LinkedHashSet1: [2, 4]
LinkedHashSet2: [1, 3]
Union is: [1, 3, 2, 4]

Giao điểm của Bộ

Để thực hiện giao giữa hai tập hợp, chúng ta có thể sử dụng retainAll()phương pháp. Ví dụ

import java.util.LinkedHashSet;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("LinkedHashSet1: " + primeNumbers);

        LinkedHashSet<Integer> 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);
    }
}

Đầu ra

LinkedHashSet1: [2, 3]
LinkedHashSet2: [2, 4]
Intersection is: [2]

Sự khác biệt của các bộ

Để tính toán sự khác biệt giữa hai tập hợp, chúng ta có thể sử dụng removeAll()phương pháp. Ví dụ,

import java.util.LinkedHashSet;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        System.out.println("LinkedHashSet1: " + primeNumbers);

        LinkedHashSet<Integer> 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);
    }
}

Đầu ra

LinkedHashSet1: [2, 3, 5]
LinkedHashSet2: [1, 3, 5]
Difference: [2]

Tập hợp con

Để kiểm tra xem một tập hợp có phải là tập hợp con của tập hợp khác hay không, chúng ta có thể sử dụng containsAll()phương pháp. Ví dụ,

import java.util.LinkedHashSet;

class Main {
    public static void main(String[] args) {
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("LinkedHashSet1: " + numbers);

        LinkedHashSet<Integer> 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);
    }
}

Đầu ra

LinkedHashSet1: [1, 2, 3, 4]
LinkedHashSet2: [2, 3]
Is LinkedHashSet2 is a subset of LinkedHashSet1? true

Các phương pháp khác của LinkedHashSet

MethodDecfscription
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

Để tìm hiểu thêm về LinkedHashSetcác phương pháp, hãy truy cập Java LinkedHashSet (tài liệu Java chính thức) .

LinkedHashSet Vs. HashSet

Cả hai LinkedHashSetvà HashSetthực hiện Setgiao diện. Tuy nhiên, tồn tại một số khác biệt giữa chúng.

  • 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

Dưới đây là sự khác biệt chính giữa LinkedHashSetvà TreeSet:

  • The TreeSet class implements the SortedSet interface. That’s why elements in a tree set are sorted. However, the LinkedHashSet class only maintains the insertion order of its elements.
  • TreeSet is usually slower than a LinkedHashSet. It is because whenever an element is added to a TreeSet, it has to perform the sorting operation.
  • LinkedHashSet allows the insertion of null values. However, we cannot insert a null value to TreeSet.








Gõ tìm kiếm nhanh...