Set trong Java là gì? Tất tần tật kiến thức về Set trong Java

Set trong Java
Trong lĩnh vực lập trình chắc hẳn các bạn đã từng nghe về Set trong Java, Set là một cấu trúc dữ liệu quan trọng và mạnh mẽ để lưu trữ các phần tử duy nhất và không theo thứ tự. Set cung cấp một tập hợp các phương thức và toán tử để thực hiện các thao tác tập hợp như thêm, loại bỏ, kiểm tra tồn tại, duyệt qua các phần tử, và thực hiện các phép toán tập hợp như giao, hợp và hiệu.
Trong bài viết này, chúng ta sẽ khám phá các khái niệm cơ bản về Set trong Java, cách khai báo và sử dụng Set, cùng với các phương thức và thao tác phổ biến khi làm việc với Set.
Bên cạnh đó, chúng ta sẽ tìm hiểu về các lớp cài đặt Set phổ biến như HashSet, LinkedHashSet và TreeSet, và điểm khác nhau giữa chúng. Chúng ta cũng sẽ xem xét các trường hợp sử dụng thích hợp cho mỗi loại Set. Hãy cùng theo dõi bài viết dưới đây nhé!

Set trong Java là gì?

Trong Java, Set là một interface trong gói java.util, và nó mô tả một tập hợp các phần tử duy nhất không có thứ tự. Set không chứa các phần tử trùng lặp, điều này đảm bảo tính duy nhất của mỗi phần tử trong tập hợp.
Các đặc điểm quan trọng của Set trong Java là:
  1. Không có thứ tự: Các phần tử trong Set không được sắp xếp theo thứ tự cụ thể nào, không phụ thuộc vào thứ tự chèn vào.
  2. Phần tử duy nhất: Mỗi phần tử trong Set là duy nhất, không có phần tử trùng lặp. Nếu thử thêm một phần tử đã có trong Set, nó sẽ không được thêm vào và không có hiệu ứng.
  3. Không hỗ trợ chỉ mục: Set không hỗ trợ truy cập các phần tử dựa trên chỉ mục. Điều này có nghĩa là bạn không thể truy cập các phần tử trong Set bằng cách sử dụng chỉ mục của chúng.
  4. Phương thức add và remove: Set cung cấp các phương thức để thêm phần tử mới vào Set (add()) và loại bỏ phần tử khỏi Set (remove()).
  5. Các lớp cài đặt của Set: Trong Java, có nhiều lớp cài đặt của interface Set như HashSet, LinkedHashSet và TreeSet. Mỗi lớp cài đặt có các đặc điểm và cách hoạt động khác nhau.
Set trong Java thường được sử dụng khi bạn muốn duy trì một tập hợp các phần tử duy nhất mà không quan tâm đến thứ tự của chúng. Ví dụ, bạn có thể sử dụng Set để lưu trữ danh sách các từ khóa duy nhất từ một văn bản hoặc để loại bỏ các phần tử trùng lặp từ một danh sách.

Khai báo Set trong Java

Trong Java, bạn có thể khai báo một Set bằng cách sử dụng một trong các lớp cài đặt của interface Set như HashSet, LinkedHashSet và TreeSet. Dưới đây là cách khai báo một Set với mỗi lớp cài đặt:
  1. HashSet:
java.util.HashSet;
Set<T> set = new HashSet<>();
  1. LinkedHashSet:
java.util.LinkedHashSet;
Set<T> set = new LinkedHashSet<>();
  1. TreeSet:
java.util.TreeSet; Set<T> set = new TreeSet<>();
Trong đó, T đại diện cho kiểu dữ liệu của các phần tử bạn muốn lưu trữ trong Set.
Sau khi khai báo, bạn có thể sử dụng các phương thức của Set để thêm, loại bỏ và thao tác với các phần tử trong Set. Ví dụ:
set.add(element); // Thêm một phần tử vào Set set.remove(element); // Loại bỏ một phần tử khỏi Setboolean contains = set.contains(element); // Kiểm tra xem phần tử có tồn tại trong Set hay khôngint size = set.size(); // Lấy số lượng phần tử trong Set
Lưu ý rằng bạn cần import các lớp cần thiết từ gói java.util để sử dụng Set và các lớp cài đặt của nó.
Lưu ý rằng bạn cần import các lớp cần thiết từ gói java.util để sử dụng Set và các lớp cài đặt của nó.

Thao tác với Set trong Java

Thao tác với Set như một tập hợp

Trong Java, Set được sử dụng để đại diện cho một tập hợp các phần tử duy nhất và không theo thứ tự. Set cung cấp một số phương thức để thao tác với Set như một tập hợp. Dưới đây là một số thao tác phổ biến:
  1. Thêm phần tử vào Set:
  1. Set<T> set = new HashSet<>();
  2. // Khởi tạo một Set
  3. set.add(element);
  4. // Thêm phần tử vào Set
  1. Loại bỏ phần tử khỏi Set:
  1. set.remove(element);
  2. // Loại bỏ phần tử khỏi Set
  1. Kiểm tra sự tồn tại của phần tử trong Set:
  1. boolean contains = set.contains(element);
  2. // Kiểm tra xem phần tử có tồn tại trong Set hay không
  1. Lấy kích thước của Set (số lượng phần tử):
  1. int size = set.size();
  2. // Lấy kích thước của Set
  1. Kiểm tra xem Set có trống hay không:
  1. boolean isEmpty = set.isEmpty();
  2. // Kiểm tra xem Set có trống hay không
  1. Xóa tất cả các phần tử trong Set:
  1. javaCopy code set.clear();
  2. // Xóa tất cả các phần tử trong Set
  1. So sánh hai Set:
  1. Set<T> otherSet = new HashSet<>();
  2. // Khởi tạo một Set khácboolean isEqual = set.equals(otherSet);
  3. // So sánh hai Set có bằng nhau không
  1. Giao hai Set (lấy các phần tử chung):
  1. Set<T> intersection = new HashSet<>(set);
  2. intersection.retainAll(otherSet); // Lấy các phần tử chung giữa hai Set
  1. Hợp hai Set (lấy tất cả các phần tử không trùng):
  1. Set<T> union = new HashSet<>(set);
  2. union.addAll(otherSet); // Lấy tất cả các phần tử từ hai Set
  1. Hiệu hai Set (lấy các phần tử trong Set gốc mà không có trong Set khác):
  1. Set<T> difference = new HashSet<>(set);
  2. difference.removeAll(otherSet); // Lấy các phần tử không có trong Set khác
Lưu ý rằng các phương thức trên áp dụng cho các lớp cài đặt của Set như HashSet, LinkedHashSet và TreeSet. Tùy thuộc vào yêu cầu của bạn, bạn có thể chọn lớp cài đặt phù hợp để sử dụng trong các trường hợp cụ thể.

Thêm phần tử vào Set trong Java

Để thêm một phần tử vào một Set trong Java, bạn có thể sử dụng phương thức add() của Set. Dưới đây là cách thực hiện:
  1. Set<T> set = new HashSet<>(); // Khởi tạo một Set// Thêm các phần tử vào SetT elementToAdd = ...; // Phần tử cần thêmboolean added = set.add(elementToAdd);
  2. if (added) {
  3.     System.out.println("Phần tử đã được thêm vào Set");
  4. } else {
  5.     System.out.println("Phần tử đã tồn tại trong Set");
  6. }
Trong ví dụ trên, chúng ta sử dụng phương thức add() của Set để thêm elementToAdd vào Set. Phương thức này sẽ trả về true nếu phần tử được thêm thành công và false nếu phần tử đã tồn tại trong Set.
Lưu ý rằng việc xác định tính duy nhất của phần tử trong Set dựa trên phương thức equals()hashCode() của phần tử đó. Do đó, nếu phần tử là một đối tượng tự định nghĩa, bạn cần đảm bảo rằng lớp của phần tử đã được định nghĩa phương thức equals()hashCode() phù hợp để đảm bảo tính duy nhất khi thêm vào Set.

Kiểm tra phần tử có thuộc trong Set

Để kiểm tra xem một phần tử có thuộc vào một Set trong Java hay không, bạn có thể sử dụng phương thức contains() của Set. Dưới đây là cách thực hiện:
  1. Set<T> set = new HashSet<>(); // Khởi tạo một Set// Thêm các phần tử vào SetT elementToCheck = ...; // Phần tử cần kiểm traboolean contains = set.contains(elementToCheck);
  2. if (contains) {
  3.      System.out.println("Phần tử tồn tại trong Set");
  4. } else {
  5.      System.out.println("Phần tử không tồn tại trong Set");
  6. }
Trong ví dụ trên, chúng ta sử dụng phương thức contains() của Set để kiểm tra xem elementToCheck có thuộc vào Set hay không. Phương thức này trả về true nếu phần tử được tìm thấy trong Set và false nếu phần tử không tồn tại.
Lưu ý rằng kiểm tra phần tử trong Set dựa trên phương thức equals() của phần tử đó. Do đó, để sử dụng phương thức contains() một cách chính xác, bạn cần đảm bảo rằng lớp của phần tử đã được định nghĩa phương thức equals() phù hợp.
Nếu phần tử là một đối tượng tự định nghĩa, bạn có thể cần ghi đè phương thức equals()hashCode() để đảm bảo tính đúng đắn của việc kiểm tra và thao tác với phần tử trong Set.

Xóa phần tử trong Set

Để xóa một phần tử khỏi một Set trong Java, bạn có thể sử dụng phương thức remove() của Set. Dưới đây là cách thực hiện:
  1. Set<T> set = new HashSet<>(); // Khởi tạo một Set// Thêm các phần tử vào SetT elementToRemove = ...; // Phần tử cần xóaboolean removed = set.remove(elementToRemove);
  2. if (removed) {
  3.       System.out.println("Phần tử đã được xóa khỏi Set");
  4. } else {
  5.       System.out.println("Phần tử không tồn tại trong Set");
  6. }
Trong ví dụ trên, chúng ta sử dụng phương thức remove() của Set để xóa elementToRemove khỏi Set. Phương thức này sẽ trả về true nếu phần tử được xóa thành công và false nếu phần tử không tồn tại trong Set.
Lưu ý rằng việc xóa phần tử từ Set chỉ xóa phần tử cụ thể đầu tiên tìm thấy (nếu tồn tại nhiều phần tử giống nhau). Nếu bạn muốn xóa tất cả các phần tử giống nhau, bạn có thể sử dụng vòng lặp hoặc phương thức removeAll() của Set.
  1. // Ví dụ xóa tất cả các phần tử giống nhau trong
  2. Set set.removeAll(Collections.singleton(elementToRemove));
Trong ví dụ trên, chúng ta sử dụng phương thức removeAll() kết hợp với Collections.singleton() để xóa tất cả các phần tử giống elementToRemove trong Set.

Duyệt các phần tử trong Set

Để duyệt qua các phần tử trong một Set trong Java, bạn có thể sử dụng một số cách khác nhau, bao gồm vòng lặp foreach và Iterator. Dưới đây là cách thực hiện các phương pháp này:
  1. Sử dụng vòng lặp foreach:
  1. Set<T> set = new HashSet<>(); // Khởi tạo một Set// Thêm các phần tử vào Setfor (T element : set) {
  2. // Xử lý phần tử element
  3. System.out.println(element);
  4. }
Trong ví dụ trên, vòng lặp foreach sẽ duyệt qua từng phần tử trong Set và thực hiện xử lý tương ứng với mỗi phần tử.
  1. Sử dụng Iterator:
  1. Set<T> set = new HashSet<>(); // Khởi tạo một Set// Thêm các phần tử vào Set
  2. Iterator<T> iterator = set.iterator();
  3. while (iterator.hasNext()) {
  4.      T element = iterator.next();
  5.      // Xử lý phần tử element
  6.      System.out.println(element);
  7. }
Trong ví dụ trên, chúng ta sử dụng phương thức iterator() để lấy một đối tượng Iterator cho Set. Sau đó, chúng ta sử dụng vòng lặp while để duyệt qua từng phần tử trong Set bằng cách sử dụng các phương thức hasNext()next() của Iterator.
Cả hai phương pháp đều cho phép bạn duyệt qua các phần tử trong Set. Tùy thuộc vào yêu cầu của bạn, bạn có thể chọn phương pháp phù hợp để thực hiện việc duyệt.

Các phương thức của Set trong Java

Trong Java, giao diện Set định nghĩa một tập hợp các phần tử duy nhất và không theo thứ tự. Các lớp cài đặt của Set như HashSet, LinkedHashSet, và TreeSet cung cấp các phương thức để thao tác với tập hợp. Dưới đây là các phương thức chính của Set:
Phương thức Mô tả
boolean add(E element) Thêm một phần tử vào tập hợp nếu nó chưa tồn tại.
boolean remove(Object object) Loại bỏ một phần tử khỏi tập hợp.
boolean contains(Object object) Kiểm tra xem phần tử có tồn tại trong tập hợp hay không.
int size() Trả về số lượng phần tử trong tập hợp.
boolean isEmpty() Kiểm tra xem tập hợp có rỗng hay không.
void clear() Xóa tất cả các phần tử trong tập hợp.
boolean equals(Object object) So sánh hai tập hợp xem chúng có bằng nhau không.
Iterator<E> iterator() Trả về một Iterator để duyệt qua các phần tử trong tập hợp.
void forEach(Consumer<? super E> action) Thực thi một hành động trên mỗi phần tử trong tập hợp.
Spliterator<E> spliterator() Tạo một Spliterator để duyệt qua các phần tử trong tập hợp.
void addAll(Collection<? extends E> c) Thêm tất cả các phần tử từ một Collection vào tập hợp.
void removeAll(Collection<?> c) Xóa tất cả các phần tử có trong Collection khỏi tập hợp.
void retainAll(Collection<?> c) Giữ lại chỉ các phần tử có trong cả tập hợp và Collection đưa vào.
boolean containsAll(Collection<?> c) Kiểm tra xem tất cả các phần tử của Collection có trong tập hợp hay không.
boolean removeIf(Predicate<? super E> filter) Xóa các phần tử thỏa mãn một điều kiện cho trước khỏi tập hợp.
Object[] toArray() Chuyển đổi tập hợp thành một mảng.
<T> T[] toArray(T[] array) Chuyển đổi tập hợp thành một mảng kiểu T.
Đọc thêm  Comment trong HTML là gì? Những điều cần biết về HTML comment
Lưu ý rằng các phương thức này đều được khai báo trong giao diện Set, và các lớp cài đặt của Set phải triển khai các phương thức này.

Lời kết

Trên đây là những thông tin về Set trong Java mà Webbox muốn chia sẻ với các bạn. Set là một cấu trúc dự liệu rất quan trọng trong Java về việc lưu trữ những phần tử duy nhất và không theo thứ tự. Bằng việc sử dụng Set, các bạn có thể thực hiện những thao tác như là thêm, loại bỏ, kiểm tra tồn tại hay duyệt qua những phần tử và thực hiện những phép toán hợp như giao, hợp và hiệu.

Với những chia sẻ của Webbox và những phương thức liên quan, hi vọng có thể giúp các bạn tận dụng được trong ứng dụng java của mình. Chúc các bạn thành công, nếu có bất kỳ thắc nào hãy liên hệ với Webbox để được giải đáp.

Tags :

Chia sẻ ngay :

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Bài viết liên quan

Bảng Giá Thiết Kế Website Thương Hiệu Cho Doanh Nghiệp
Dịch vụ thiết kế website thương hiệu cho doanh nghiệp tại WEBBOX là một hành trình mang tính chiến lược,...
5
PHP là gì? Tổng quan kiến thức ngôn ngữ PHP đầy đủ nhất
Trong thế giới công nghệ phát triển nhanh chóng và vô cùng đa dạng ngày nay, chắc hẳn các bạn đã không...
0
Rất thích suy nghĩ của bạn, hãy bình luận.x

Tư vấn giải pháp website tốt nhất cho doanh nghiệp

Chúng tôi luôn sẵn sàng lắng nghe và đưa ra giải pháp phù hợp nhất cho vấn đề của bạn.