Lớp Java HashSet

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java HashSet. Chúng ta sẽ tìm hiểu về các phương pháp và hoạt động bộ băm khác nhau với sự trợ giúp của các ví dụ.

Các HashSetlớp của framework Java Collections cung cấp các chức năng của cấu trúc dữ liệu bảng băm.

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

Tạo HashSet

Để tạo bộ băm, java.util.HashSettrướ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 bộ băm trong Java.

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

Ở đây, chúng tôi đã tạo một bộ băm có tên numbers.

Chú ý, phần mới HashSet<>(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 set 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 bảng băm mà không cần xác định dung lượng và hệ số tải của nó. Ví dụ,

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

Theo mặc định,

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

Phương thức của HashSet

Các HashSetlớp học cung cấp phương pháp khác nhau mà cho phép chúng tôi thực hiện các hoạt động khác nhau trên phim trường.

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

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

Ví dụ,

import java.util.HashSet;

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

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

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

Đầu ra

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

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

Để truy cập các phần tử của tập băm, 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.HashSet;
import java.util.Iterator;

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

        // Calling iterator() method
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("HashSet using Iterator: ");
        // Accessing elements
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Đầu ra

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

Xóa các phần tử

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

Ví dụ,

import java.util.HashSet;

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

        // Using 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

HashSet: [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 HashSetlớ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ộ

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

import java.util.HashSet;

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

        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(3);
        System.out.println("HashSet2: " + numbers);

        // Union of two set
        numbers.addAll(evenNumbers);
        System.out.println("Union is: " + numbers);
    }
}

Đầu ra

HashSet1: [2, 4]
HashSet2: [1, 3]
Union is: [1, 2, 3, 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.HashSet;

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

        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet2: " + evenNumbers);

        // Intersection of two sets
        evenNumbers.retainAll(primeNumbers);
        System.out.println("Intersection is: " + evenNumbers);
    }
}

Đầu ra

HashSet1: [2, 3]
HashSet2: [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.HashSet;

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

        HashSet<Integer> oddNumbers = new HashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        System.out.println("HashSet2: " + oddNumbers);

        // Difference between HashSet1 and HashSet2
        primeNumbers.removeAll(oddNumbers);
        System.out.println("Difference : " + primeNumbers);
    }
}

Đầu ra

HashSet1: [2, 3, 5]
HashSet2: [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.HashSet;

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

        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet2: " + primeNumbers);

        // Check if primeNumbers is a subset of numbers
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("Is HashSet2 is subset of HashSet1? " + result);
    }
}

Đầu ra

HashSet1: [1, 2, 3, 4]
HashSet2: [2, 3]
Is HashSet2 is a subset of HashSet1? true

Các phương pháp HashSet khác

MethodDecfscription
clone()Creates a copy of the HashSet
contains()Searches the HashSet for the specified element and returns a boolean result
isEmpty()Checks if the HashSet is empty
size()Returns the size of the HashSet
clear()Removes all the elements from the HashSet

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

Tại sao HashSet?

Trong Java, HashSetthường được sử dụng nếu chúng ta phải truy cập các phần tử một cách ngẫu nhiên. Đó là vì các phần tử trong bảng băm được truy cập bằng mã băm.

Mã băm của một phần tử là một định danh duy nhất giúp xác định phần tử trong bảng băm.

HashSetkhông được chứa các phần tử trùng lặp. Do đó, mỗi phần tử bộ băm có một mã băm duy nhất.

Lưu ý: HashSet không được đồng bộ hóa. Đó là nếu nhiều luồng truy cập vào bộ băm cùng một lúc và một trong các luồng sửa đổi bộ băm. Sau đó, nó phải được đồng bộ hóa bên ngoài.









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