Set Trong Java - Học Lập Trình Java Online - VietTuts

Sự khác nhau giữa ArrayList và LinkedList HashSet trong java

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
    • Sử dụng bộ lặp Iterator
    • Sử dụng vòng lặp for-each
  • 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 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.
T[] toArray(T[] a) 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] Sự khác nhau giữa ArrayList và LinkedList HashSet 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

Từ khóa » Duyệt Set Trong C++