Nội dung chính
- Set interface trong java
- Khai báo interface Set trong java
- Các phương thức của interface Set trong java
- Ví dụ về Set trong java
- Khai báo Set trong Java
- Thêm các phần tử vào Set trong Java
- Thêm các phần tử một Collection khác vào Set trong Java
- Duyệt các phần của một Set trong Java
- Xóa phần tử khỏi Set trong Java
- Xóa tất cả các phần tử khỏi Set trong Java
- Độ dài của Set trong Java
- Kiểm tra Set trống trong Java
- Chuyển đổi Set thành List trong Java
Set interface trong java
Set là một interface kế thừa Collection interface trong java. Set trong java là một Collection không thể chứa các phần tử trùng lặp.
Set được triển khai bởi Hashset, LinkedHashset, Treeset hoặc EnumSet.
- HashSet lưu trữ các phần tử của nó trong bảng băm, là cách thực hiện tốt nhất, tuy nhiên nó không đảm bảo về thứ tự các phần tử được chèn vào.
- TreeSet lưu trữ các phần tử của nó trong một cây, sắp xếp các phần tử của nó dựa trên các giá trị của chúng, về cơ bản là chậm hơn HashSet.
- LinkedHashSet được triển khai dưới dạng bảng băm với có cấu trúc dữ liệu danh sách liên kết, sắp xếp các phần tử của nó dựa trên thứ tự chúng được chèn vào tập hợp (thứ tự chèn).
- EnumSet là một cài đặt chuyên biệt để sử dụng với các kiểu enum.
Khai báo interface Set trong java
public interface Set<E> extends Collection<E>
Các phương thức của interface Set trong java
Method | Description |
---|---|
boolean add(Object element) | Nó được sử dụng để chèn các phần tử vào set. |
boolean addAll(Collection c) | Nó được sử dụng để chèn tất cả các phần tử của c vào set. |
void clear() | Xóa tất cả các phần tử khỏi set. |
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 set 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 set. |
boolean isEmpty() | Trả về true nếu set không chứa phần tử. |
int hashCode() | Trả về giá trị mã băm |
Iterator |
Trả về một trình vòng lặp iterator để duyệt qua các phần tử của set. |
boolean remove(Object o) | Xóa phần tử đã chỉ định khỏi set. |
boolean removeAll(Collection c) | Xóa khỏi set 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 set được chứa trong collection c đã chỉ định. |
int size() | Trả về số lượng các phần tử của set. |
Object[] toArray() | Trả về một mảng chứa tất cả các phần tử trong set. |
Trả về một mảng chứa tất cả các phần tử trong set, kiểu run-time của mảng trả về là kiểu đã chỉ định. |
Ví dụ về Set trong java
Hãy xem ví dụ đơn giản về Set trong java sau, để cho bạn cảm nhận về cách Set hoạt động:
package vn.viettuts.set; import java.util.HashSet; 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"); 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 Set trong Java
Vì Set là một (giao diện) interface, bạn cần khởi tạo một triển khai cụ thể của giao diện để sử dụng nó. Về cơ bản bạn có thể chọn các collection sau:
- HashSet
- LinkedHashSet
- TreeSet
- EnumSet
Ví dụ: khai báo Set trong Java:
Set setA = new EnumSet(); Set setB = new HashSet(); Set setC = new LinkedHashSet(); Set setD = new TreeSet();
Thêm các phần tử vào Set trong Java
Để thêm các phần tử cho một Set bạn gọi phương thức add(). Phương thức này được kế thừa từ Collection interface.
Set<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 Set 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 set, Ví dụ:
package vn.viettuts.set; import java.util.HashSet; import java.util.Set; public class SetExam { public static void main(String[] args) { Set<String> setA = new HashSet<String>(); Set<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 Set trong Java
Có hai cách để duyệt các phần tử của Java Set.
- 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.set; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class DuyetSet1 { public static void main(String[] args) { Set<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.set; import java.util.HashSet; import java.util.Set; public class DuyetSet2 { public static void main(String[] args) { Set<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 Set trong Java
Bạn xóa các phần tử khỏi Set bằng cách gọi phương thức remove(Object o). Ví dụ:
package vn.viettuts.set; import java.util.HashSet; import java.util.Set; public class XoaSetExam1 { public static void main(String[] args) { Set<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 Set trong Java
Bạn có thể xóa tất cả các phần tử khỏi Set bằng phương thức clear().
set.clear();
Độ dài của Set trong Java
Bạn có thể kiểm tra độ dài/kích thước của một set trong Java bằng cách sử dụng phương thức size().
package vn.viettuts.set; import java.util.HashSet; 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"); 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 Set trống trong Java
Bạn có thể kiểm tra độ dài/kích thước của một set trong Java bằng cách sử dụng phương thức isEmpty().
package vn.viettuts.set; import java.util.HashSet; 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"); Set<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]