JAVA-SET

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 implement 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.

Java Set Class Diagram

Interface Set trong Java extend Interface Collection. Interface Collection extend Interface Iterable. Một số class implement Set thường được sử dụng là HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet và ConcurrentSkipListSet. AbstractSet cung cấp một triển khai khung của giao diện Set để giảm bớt nỗ lực trong việc triển khai Set.

Phương thức của Set trong Java

Trong phần này, chúng ta sẽ thảo luận về một số phương pháp Java Set hữu ích:

  • int size(): để lấy số phần tử trong tập hợp.
  • Boolean IsEmpty(): Để kiểm tra xem trong Set có trống hay không.
  • Boolean contains(Object O): Trả về TRUE nếu trong Set này chứa phần tử được chỉ định.
  • Iterator iterator(): trả về iterator qua các phần tử trong bộ này. Các yếu tố được trả lại trong không có thứ tự cụ thể.
  • Object[] toArray(): Trả về một mảng chứa tất cả các phần tử trong tập này. Nếu Set này thực hiện bất kỳ bảo đảm nào về đơn hàng nào các phần tử của nó được trả về bởi iterator của nó, phương thức này phải trả về các phần tử theo cùng một thứ tự.
  • Boolean add(E e): thêm phần tử được chỉ định vào Set này nếu nó chưa xuất hiện (hoạt động tùy chọn).
  • Boolean remove(Object O): Xóa phần tử được chỉ định khỏi Set này nếu nó có mặt (hoạt động tùy chọn).
  • Boolean removeAll(Collection C): Xóa khỏi bộ này tất cả các phần tử của nó có trong Collection đã chỉ định (hoạt động tùy chọn).
  • Boolean retainAll(Collection C): Chỉ giữ lại các phần tử trong tập này được chứa trong Collection được chỉ định (hoạt động tùy chọn).
  • void clear(): Xóa tất cả các phần tử khỏi Set.
  • Iterator iterator(): trả về iterator qua các phần tử trong Set.

Java Array to Set

Không giống như List, chúng ta không thể chuyển đổi Set Java thành một mảng trực tiếp vì nó KHÔNG được triển khai bằng Mảng.
Vì vậy, chúng ta không thể sử dụng lớp Mảng để có được khung nhìn của mảng như được thiết lập. Chúng ta có thể làm theo một cách tiếp cận khác. Chúng ta có thể chuyển một mảng thành List bằng phương thức Arrays.asList (), sau đó sử dụng nó để tạo Set. Bằng cách sử dụng cách tiếp cận này, chúng ta có thể che giấu một Mảng Java cho Set theo hai cách. Ví dụ:

Phương pháp tiếp cận-1
Trong cách tiếp cận này, đầu tiên Chúng ta cần tạo một Danh sách bằng cách sử dụng mảng đã cho và sử dụng nó để tạo một Set như hình dưới đây.


import java.util.*;

public class ArrayToSet {
   public static void main(String[] args) {
		
	String[] vowels = {"a","e","i","o","u"};
		
	Set<String> vowelsSet = new HashSet>(Arrays.asList(vowels));
	System.out.println(vowelsSet);
	
	/**
	 * Unlike List, Set is NOt backed by array, 
	 * so we can do structural modification without any issues.
	 */
	vowelsSet.remove("e");
	System.out.println(vowelsSet);
	vowelsSet.clear();
	System.out.println(vowelsSet);
   }
}
Code language: JavaScript (javascript)

Phương pháp tiếp cận-2
Trong cách tiếp cận này, chúng ta KHÔNG sử dụng Danh sách trung gian để tạo Tập hợp từ Mảng. Đầu tiên hãy tạo một HashSet trống, sau đó sử dụng Collections.addAll() để sao chép các phần tử của mảng vào Tập đã cho như hình dưới đây.

import java.util.*;

public class ArrayToSet2 {
   public static void main(String[] args) {
		
	String[] vowels = {"a","e","i","o","u"};
		
	Set<String> vowelsSet = new HashSet<>();
	Collections.addAll(vowelsSet, vowels); 
	System.out.println(vowelsSet);

	/** 
	 * Unlike List, Set is NOt backed by array, 
	 * so we can do structural modification without any issues.
	 */
	vowelsSet.remove("e");
	System.out.println(vowelsSet);
	vowelsSet.clear();
	System.out.println(vowelsSet);
   }
}Code language: JavaScript (javascript)

Output:-


[a, e, u, i, o]
[a, u, i, o]
[]
Code language: JSON / JSON with Comments (json)

Java Set to Array


import java.util.*;

public class SetToArray {
   public static void main(String[] args) {
	Set<String< vowelsSet = new HashSet<>();

	// add example
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	//convert Set to Array
	String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
	System.out.println(Arrays.toString(strArray)); 
   }
}
Code language: JavaScript (javascript)

Output:

[a, e, u, i, o]Code language: JSON / JSON with Comments (json)

Java Set Sorting

Như chúng ta đã biết, Set (HashSet) KHÔNG hỗ trợ sắp xếp các phần tử một cách trực tiếp. Nó lưu trữ và hiển thị các phần tử của nó theo thứ tự ngẫu nhiên.

Tuy nhiên, tôi có một số cách tiếp cận để sắp xếp các yếu tố của nó như được hiển thị bên dưới:


import java.util.*;

public class SetSortingExample {

	public static void main(String[] args) {
		Set<Integer> intsSet = new HashSet<>();
		Random random = new Random();
		for (int i = 0; i  {return (o2-o1);});
		System.out.println("Reverse Sorting: " + intsList2);

		// Approach-3
		Set<Integer> sortedSet = new TreeSet<>(intsSet);
		System.out.println("Sorted Set: " + sortedSet);
	}
}
Code language: JavaScript (javascript)

Output:


[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]
Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Code language: CSS (css)

Java Set Common Operations

Hầu hết các hoạt động phổ biến được thực hiện trên Java Set là add, addAll, clear, size, v.v. Dưới đây là một ví dụ Java Set đơn giản cho thấy cách sử dụng phương pháp phổ biến.

import java.util.*;

public class SetCommonOperations 
{
   public static void main(String args[]) 
   {
	Set<String> vowels= new HashSet<>();
		
	//add example
	vowels.add("A");
	vowels.add("E");
	vowels.add("I");

	//We cannot insert elements based on index to a Set
	System.out.println(vowels);
		
	Set<String> set = new HashSet<>();
	set.add("O");
	set.add("U");
	
	//appending set elements to letters
	vowels.addAll(set);
	System.out.println(vowels);
	
	//clear example to empty the set
	set.clear();
		
	//size example
	System.out.println("letters set size = " + vowels.size());
		
	vowels.clear();
	vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
	System.out.println("Given set contains E element or not? = " + vowels.contains("E"));
		
   }
}Code language: JavaScript (javascript)

Output:

[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = trueCode language: JavaScript (javascript)

Java Set Iterator

import java.util.*;

public class SetIteratorExample
{
   public static void main(String[] args) 
   {

	Set<Integer> set = new HashSet<>();
	for(int i=0; i<5; i++) 
		set.add(i);
		
	Iterator iterator = set.iterator();
	
	//simple iteration
	while(iterator.hasNext()){
		int i = (int) iterator.next();
		System.out.print(i + ", ");
	}
	System.out.println("\n" + set);
	
	//modification of set using iterator
	iterator = set.iterator();
	while(iterator.hasNext()){
		int x = (int) iterator.next();
		if(x%2 ==0) iterator.remove();
	}
	System.out.println(set);
		
	//changing set structure while iterating
	iterator = set.iterator();
	while(iterator.hasNext()){
                //ConcurrentModificationException here
		int x = (int) iterator.next(); 
		if(x==1) set.add(10);
	}
   }
}Code language: JavaScript (javascript)

Java Set to Stream

import java.util.*;

public class SetToStream {

   public static void main(String[] args) {
	Set<String> vowelsSet = new HashSet<>();
	// add example
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	//convert set to stream
	vowelsSet.stream().forEach(System.out::println);
   }
}
Code language: JavaScript (javascript)

Output:-


a
e
u
i
o

Tổng kết

Đó là tất cả một bản tổng hợp nhanh về Set trong Java. Tôi hy vọng những ví dụ về Set Java này sẽ giúp bạn bắt đầu với lập trình Bộ sưu tập.

Cảm ơn bạn đã đọc hướng dẫn của tôi. Vui lòng thả cho tôi một bình luận nếu bạn thích hướng dẫn của tôi hoặc có bất kỳ vấn đề hoặc đề xuất hoặc bất kỳ lỗi loại nào.

Nguồn video: Jakob Jenkov

Bài viết liên quan

Leave a Reply

Your email address will not be published.