VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test
Java cơ bản Các khái niệm Java OOPs

Java Collections

Collections là gì? List Interface trong java ArrayList trong java LinkedList trong java ArrayList vs LinkedList Set Interface trong java HashSet trong java HashSet trong Java hoạt động như thế nào? LinkedHashSet trong java TreeSet trong java Map Interface trong java HashMap trong java HashMap trong Java hoạt động như thế nào? LinkedHashMap trong java TreeMap trong java Hashtable trong java HashMap vs Hashtable EnumSet trong java EnumMap trong java Lớp Collections trong java Sorting trong Collections Comparable trong java Comparator trong java Comparable vs Comparator Lớp Properties trong java ArrayList vs Vector Array vs ArrayList Iterator trong Java
Java AWT Java Swing Java I/O Ví Dụ Java I/O Java JDBC Các tính năng mới trong java Lập Trình Mạng Với Java Các Tính Năng Mới Trong Java Bài Tập Java Có Lời Giải Câu hỏi phỏng vấn java
1 / 3
❮ ❯

HashSet trong java


Set trong java
LinkedHashSet trong java

Nội dung chính

  • Lớp HashSet trong Java
  • Đặc điểm của lớp HashSet trong Java
  • Hierarchy của lớp HashSet trong Java
  • Khai báo của lớp HashSet trong Java
  • Constructor của lớp HashSet trong Java
  • Các phương thức của lớp HashSet trong java
  • Ví dụ về HashSet trong java
  • Khai báo HashSet trong Java
  • Thêm các phần tử vào HashSet trong Java
  • Thêm các phần tử một Collection khác vào HashSet trong Java
  • Duyệt các phần của một HashSet trong Java
    • Sử dụng bộ lặp Iterator
    • Sử dụng vòng lặp for-each
  • Xóa phần tử khỏi HashSet trong Java
  • Xóa tất cả các phần tử khỏi HashSet trong Java
  • Độ dài của HashSet trong Java
  • Kiểm tra HashSet trống trong Java
  • Chuyển đổi Set thành List trong Java
  • Ví dụ sử dụng HashSet với kiểu do người dùng tự định nghĩa (Object)
  • Sự khác nhau giữa List và Set trong java

Lớp HashSet trong Java

Lớp HashSet trong java là một lớp kế thừa lớp AbstractSet và triển khai của Set Interface trong Collections Framework nên nó sẽ có một vài đặc điểm và phương thức tương đồng với Set. HashSet được sử dụng để tạo một bộ sưu tập sử dụng bảng băm để lưu trữ. Nó kế thừa lớp AbstractSet và triển khai Set interface.

Một hash table lưu giữ thông tin bởi sử dụng một kỹ thuật được gọi là hashing (băm). Trong hashing, nội dung mang tính thông tin của một key được sử dụng để quyết định một value duy nhất, được gọi là hash code của nó.

Hash code sau đó được sử dụng như là index, tại đó dữ liệu mà liên kết với key được lưu giữ. Phép biến đổi của key vào trong hash code của nó được thực hiện tự động.

HashSet trong java hoạt động như thế nào?

Đặc điểm của lớp HashSet trong Java

Các điểm quan trọng về lớp HashSet trong java là:

  • HashSet chỉ chứa các phần tử duy nhất.
  • HashSet lưu trữ các phần tử bằng cách sử dụng một cơ chế được gọi là băm (hash table).

Hierarchy của lớp HashSet trong Java

Lớp HashSet extends lớp AbstractSet impliments giao diện Set. Giao diện Set kế thừa giao diện Collection và Iterable:

HashSet trong java

Khai báo của lớp HashSet trong Java

Dưới đây là khai báo của lớp java.util.HashSet trong java


public class HashSet<E> extends AbstractSet<E>
        implements Set<E>, Cloneable, Serializable

Constructor của lớp HashSet trong Java

Constructor Mô tả
HashSet() Nó được sử dụng để khởi tạo một HashSet trống có dung lượng ban đầu mặc định (16) và hệ số tải (0,75).
HashMapHashSet(Collection c) Nó được sử dụng để xây dựng một HashSet chứa collection c được chỉ định.
HashSet(int initialCapacity) Nó được sử dụng để xây dựng một HashSet trống với dung lượng ban đầu được chỉ định và hệ số tải mặc định là 0,75.
HashSet(int initialCapacity, float loadFactor) Nó được sử dụng để xây dựng HashSet trống có dung lượng ban đầu được chỉ định và hệ số tải được chỉ định.

Các phương thức của lớp HashSet trong java

Method Description
boolean add(Object element) Nó được sử dụng để chèn các phần tử vào HashSet.
boolean addAll(Collection c) Nó được sử dụng để chèn tất cả các phần tử của c vào HashSet.
void clear() Xóa tất cả các phần tử khỏi HashSet.
boolean contains(Object element) Trả về true nếu tập hợp này chứa phần tử đã chỉ định.
boolean containsAll(Collection c) Trả về true nếu HashSet chứa tất cả các phần tử của collection c đã chỉ định.
boolean equals(Object o) So sánh các đối tượng được chỉ định với HashSet.
boolean isEmpty() Trả về true nếu HashSet không chứa phần tử.
int hashCode() Trả về giá trị mã băm
Iterator iterator() Trả về một trình vòng lặp iterator để duyệt qua các phần tử của HashSet.
boolean remove(Object o) Xóa phần tử đã chỉ định khỏi HashSet.
boolean removeAll(Collection c) Xóa khỏi HashSet tất cả các phần tử của nó được chứa trong collection c đã chỉ định.
boolean retainAll(Collection c) Chỉ giữ lại các phần tử trong HashSet được chứa trong collection c đã chỉ định.
int size() Trả về số lượng các phần tử của HashSet.
Object[] toArray() Trả về một mảng chứa tất cả các phần tử trong HashSet.
T[] toArray(T[] a) Trả về một mảng chứa tất cả các phần tử trong HashSet, kiểu run-time của mảng trả về là kiểu đã chỉ định.

Ví dụ về HashSet trong java

Hãy xem ví dụ đơn giản về HashSet trong java sau, để xem HashSet hoạt động như thế nào:


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam1 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        System.out.println("Số phần tử của setA: " + setA.size());
        System.out.println("Các phần tử của setA: " + setA);
        System.out.println("setA có chứa Java không? " + setA.contains("Java"));
        System.out.println("setA có chứa C++ không? " + setA.contains("C++"));
    }
}

Kết quả:

Số phần tử của setA: 3
Các phần tử của setA: [Java, PHP, Python]
setA có chứa Java không? true
setA có chứa C++ không? false

Khai báo HashSet trong Java

Ví dụ: khai báo HashSet trong Java:


Set setA = new HashSet();
HashSet setB = new HashSet();

Thêm các phần tử vào HashSet trong Java

Để thêm các phần tử cho một HashSet bạn gọi phương thức add(). Phương thức này được kế thừa từ Collection interface.


HashSet<String> setA = new HashSet<String>();
setA.add("Java");
setA.add("Python");
setA.add("Java");
setA.add("PHP");

Thêm các phần tử một Collection khác vào HashSet trong Java

Phương thức addAll(Collection c) được sử dụng để chèn tất cả các phần tử của c vào HashSet, Ví dụ:


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam2 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        HashSet<String> setB = new HashSet<String>();
        setB.add("Java");
        setB.add("Python");
        setB.add("Java");
        setB.add("PHP");
        // Thêm các phần tử setB khác vào setA trong Java
        setA.addAll(setB);
        
        System.out.println("Số phần tử của setA: " + setA.size());
        System.out.println("Các phần tử của setA: " + setA);
        System.out.println("setA có chứa Java không? " + setA.contains("Java"));
        System.out.println("setA có chứa C++ không? " + setA.contains("C++"));
    }
}

Kết quả:

Số phần tử của setA: 3
Các phần tử của setA: [Java, PHP, Python]
setA có chứa Java không? true
setA có chứa C++ không? false

Duyệt các phần của một HashSet trong Java

Có hai cách để duyệt các phần tử của Java HashSet.

  • Sử dụng bộ lặp Iterator
  • Sử dụng vòng lặp for-each

Sử dụng bộ lặp Iterator

Ví dụ duyệt Set với bộ lặp Iterator:


package vn.viettuts.collection.hashset;

import java.util.HashSet;
import java.util.Iterator;

public class HashSetExam3 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        System.out.println("Số phần tử của setA: " + setA.size());
        System.out.println("Các phần tử của setA: ");
        Iterator<String> iterator = setA.iterator();
        while (iterator.hasNext()) {
            System.out.println((String) iterator.next());
        }
    }
}

Kết quả:

Số phần tử của setA: 3
Các phần tử của setA: 
Java
PHP
Python

Sử dụng vòng lặp for-each

Ví dụ duyệt Set với vòng lặp for-each:


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam4 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        System.out.println("Số phần tử của setA: " + setA.size());
        System.out.println("Các phần tử của setA: ");
        for (String element : setA) {
            System.out.println(element);
        }
    }
}

Kết quả:

Số phần tử của setA: 3
Các phần tử của setA: 
Java
PHP
Python

Xóa phần tử khỏi HashSet trong Java

Bạn xóa các phần tử khỏi HashSet bằng cách gọi phương thức remove(Object o). Ví dụ:


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam5 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        System.out.println("Các phần tử của setA trước khi xóa: ");
        for (String element : setA) {
            System.out.println(element);
        }
        // xóa phần tử PHP khỏi setA
        setA.remove("PHP");
        System.out.println("Các phần tử của setA sau khi xóa: ");
        for (String element : setA) {
            System.out.println(element);
        }
    }
}

Kết quả:

Các phần tử của setA trước khi xóa: 
Java
PHP
Python
Các phần tử của setA sau khi xóa: 
Java
Python

Xóa tất cả các phần tử khỏi HashSet trong Java

Bạn có thể xóa tất cả các phần tử khỏi HashSet bằng phương thức clear().


set.clear();

Độ dài của HashSet trong Java

Bạn có thể kiểm tra độ dài/kích thước của một HashSet trong Java bằng cách sử dụng phương thức size().


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam6 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        System.out.println("Số phần tử của setA: " + setA.size());
    }
}

Kết quả:

Số phần tử của setA: 3

Kiểm tra HashSet trống trong Java

Bạn có thể kiểm tra độ dài/kích thước của một HashSet trong Java bằng cách sử dụng phương thức isEmpty().


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam7 {
    public static void main(String[] args) {
        HashSet<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        HashSet<String> setB = new HashSet<String>();
        System.out.println("setA có trống không? " + setA.isEmpty());
        System.out.println("setB có trống không? " + setB.isEmpty());
    }
}

Kết quả:

setA có trống không? false
setB có trống không? true

Chuyển đổi Set thành List trong Java

Bạn có thể chuyển đổi Set thành List trong Java bằng cách tạo List và gọi addAll() phương thức của nó, truyền tham số dưới dạng set cho phương thức addAll(). Ví dụ:


package vn.viettuts.set;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SetExam {
    public static void main(String[] args) {
        Set<String> setA = new HashSet<String>();
        setA.add("Java");
        setA.add("Python");
        setA.add("Java");
        setA.add("PHP");
        List<String> listA = new ArrayList<String>();
        // chuyển đổi setA thành listA
        listA.addAll(setA);
        System.out.println(listA);
    }
}

Kết quả:

[Java, PHP, Python]

Ví dụ sử dụng HashSet với kiểu do người dùng tự định nghĩa (Object)


package vn.viettuts.collection.hashset;

import java.util.HashSet;

public class HashSetExam8 {
    public static void main(String[] args) {
        // khoi tao hashSet
        HashSet<Student> hashSet = new HashSet<Student>();
        // Tao cac doi tuong Student
        Student student1 = new Student("Cong", 17, "Hanoi");
        Student student2 = new Student("Dung", 16, "Haiphong");
        Student student3 = new Student("Ngon", 18, "Hanoi");
        Student student4 = new Student("Hanh", 19, "Danang");
        // them cac doi tuong Student vao hashSet
        hashSet.add(student1);
        hashSet.add(student2);
        hashSet.add(student3);
        hashSet.add(student4);
        hashSet.add(student1);
        // Hien thi hashSet
        for (Student student : hashSet) {
            System.out.println(student.toString());
        }
    }
}

/**
 * Student class
 * 
 * @author viettuts.vn
 */
class Student implements {
    private String name;
    private int age;
    private String address;
 
    public Student() {
    }
 
    public Student(String name, int age, String address) {
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    @Override
    public String toString() {
        return "Student@name=" + name + ",age=" + age + ",address=" + address;
    }
}

Kết quả:

Student@name=Dung,age=16,address=Haiphong
Student@name=Hanh,age=19,address=Danang
Student@name=Cong,age=17,address=Hanoi
Student@name=Ngon,age=18,address=Hanoi

Sự khác nhau giữa List và Set trong java

Đây là một câu hỏi được sử dụng với tần suất khá cao khi đi phỏng vấn.

Câu trả lời là List có thể chứa các phần tử trùng lặp, trong khi Set chỉ chứa các phần tử duy nhất.

Các câu hỏi lắt léo liên quan:

  • Sự khác nhau giữa ArrayList và Set là gì?
  • Sự khác nhau giữa LinkedList và Set là gì?
  • Sự khác nhau giữa List và HashSet là gì?
  • ...

Set trong java
LinkedHashSet trong java

Bài viết liên quan:

  • Mảng (Array) trong java
  • ArrayList trong java
  • Sự khác nhau giữa Array với ArrayList
  • Sắp xếp các phần tử của List
  • Sự khác nhau giữa ArrayList và Vector
  • TreeSet trong java
  • HashSet trong java
  • HashMap trong java
  • Sự khác nhau giữa HashMap và Hashtable
  • List câu hỏi phỏng vấn Java Collection

Recent Updates

Xuất dữ liệu ra màn hình console trong JavaCài đặt môi trường JavaJava Swing - Bài tập quản lý sinh viên trong javaLinkedList trong javaArrayList trong javaBài tập java có lời giảiSử dụng Javascript trong HTMLToán tử dấu 2 chấm (::) trong Java 8Lambda Expression - Biểu thức Lambda trong java 8Collection trong C#Bài tập Java - Sắp xếp nhanh (Quick Sort) trong JavaBài tập Java - Sắp xếp chèn (Insertion Sort) trong JavaSắp Tết 2026 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2026?

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml