웹사이트 검색

Java 세트 – Java로 설정


자바 세트

이 섹션에서는 Java Set에 대한 몇 가지 중요한 사항에 대해 설명합니다.

  • Java Set 인터페이스는 Java Collections Framework의 구성원입니다.
  • 목록과 달리 세트는 중복 요소를 추가할 수 없습니다.
  • 설정을 사용하면 최대 하나의 null 요소만 추가할 수 있습니다.
  • 인터페이스 설정에는 Java 8에서 하나의 기본 메서드인 spliterator가 있습니다.
  • 목록 및 배열과 달리 Set은 요소의 인덱스 또는 위치를 지원하지 않습니다.
  • Set은 Generics를 지원하며 가능할 때마다 사용해야 합니다. Set과 함께 제네릭을 사용하면 런타임 시 ClassCastException을 피할 수 있습니다.
  • 고유한 요소를 유지하기 위해 Set 인터페이스 구현을 사용할 수 있습니다.

Java 세트 클래스 다이어그램

자바 설정 방법

이 섹션에서는 몇 가지 유용한 Java Set 메서드에 대해 설명합니다.

  1. int size(): Set의 요소 수를 가져옵니다.
  2. 부울 isEmpty(): Set이 비어 있는지 확인합니다.
  3. boolean contains(Object o): 이 Set에 지정된 요소가 포함되어 있으면 true를 반환합니다.
  4. Iterator iterator(): 이 집합의 요소에 대한 반복자를 반환합니다. 요소는 특별한 순서 없이 반환됩니다.
  5. Object[] toArray(): 이 집합의 모든 요소를 포함하는 배열을 반환합니다. 이 세트가 반복자에 의해 요소가 반환되는 순서를 보장하는 경우 이 메서드는 요소를 동일한 순서로 반환해야 합니다.
  6. boolean add(E e): 지정된 요소가 아직 존재하지 않는 경우 이 집합에 추가합니다(선택적 작업).
  7. boolean remove(Object o): 지정된 요소가 있는 경우 이 집합에서 해당 요소를 제거합니다(선택적 작업).
  8. boolean removeAll(Collection c): 이 세트에서 지정된 컬렉션에 포함된 모든 요소를 제거합니다(선택적 작업).
  9. boolean retainAll(Collection c): 지정된 컬렉션에 포함된 이 집합의 요소만 유지합니다(선택적 작업).
  10. void clear(): 세트에서 모든 요소를 제거합니다.
  11. Iterator iterator(): 이 집합의 요소에 대한 반복자를 반환합니다.

설정할 Java 배열

목록과 달리 Java 집합은 배열을 사용하여 구현되지 않으므로 직접 배열로 변환할 수 없습니다. 따라서 Arrays 클래스를 사용하여 배열의 보기를 설정된 대로 가져올 수 없습니다. 우리는 다른 접근법을 따를 수 있습니다. Arrays.asList() 메서드를 사용하여 배열을 목록으로 변환한 다음 이를 사용하여 집합을 만들 수 있습니다. 이 접근 방식을 사용하여 두 가지 방법으로 Java Array를 Set로 변환할 수 있습니다. 하나의 간단한 예를 사용하여 하나씩 논의해 봅시다. Approach-1 이 접근 방식에서는 먼저 주어진 배열을 사용하여 List를 생성하고 이를 사용하여 아래와 같이 Set을 생성해야 합니다.

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);
   }
}

접근법-2 이 접근법에서는 배열에서 세트를 생성하기 위해 중간 목록을 사용하지 않습니다. 먼저 빈 HashSet을 만든 다음 Collections.addAll()을 사용하여 아래와 같이 배열 요소를 지정된 Set에 복사합니다.

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);
   }
}

출력:- 위의 두 프로그램을 실행하면 아래와 같은 출력이 표시됩니다.

[a, e, u, i, o]
[a, u, i, o]
[]

Java 배열로 설정

이 섹션에서는 아래와 같이 Set.toArray() 메서드를 사용하여 문자열 집합을 문자열 배열로 변환하는 프로그램을 작성합니다.

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)); 
   }
}

출력:- 위의 프로그램을 실행하면 아래와 같이 출력됩니다.

[a, e, u, i, o]

자바 집합 정렬

아시다시피 Set(HashSet)은 요소 정렬을 직접 지원하지 않습니다. 임의의 순서로 요소를 저장하고 표시합니다. 그러나 아래와 같이 요소를 정렬하는 몇 가지 접근 방식이 있습니다.

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);
	}
}

출력:- 위의 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.

[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]

Java 집합 공통 작업

Java Set에서 수행되는 가장 일반적인 작업은 add, addAll, clear, size 등입니다. 다음은 일반적인 메서드 사용법을 보여주는 간단한 Java Set 예제입니다.

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"));
		
   }
}

산출:-

[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true

자바 세트 반복자

다음은 Java Set을 반복하는 방법을 보여주는 간단한 예입니다.

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);
	}
   }
}

Java 스트림으로 설정

다음은 Java 세트를 스트림으로 변환하고 요구 사항에 따라 일부 작업을 수행하는 방법을 보여주는 간단한 예입니다.

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);
   }
}

산출:-

a
e
u
i
o

자바 SE 9 세트

Java SE 9 릴리스에서 Oracle Corp은 Set 인터페이스에 몇 가지 유용한 유틸리티 메서드를 추가할 예정입니다. 간단하고 유용한 예를 통해 이해하는 것이 좋습니다. "Java SE 9: Set Factory Methods\에 있는 튜토리얼을 참조하십시오. 지금까지 Set in Java에 대해 간단히 정리했습니다. 이 Java Set 예제가 Set 컬렉션 프로그래밍을 시작하는 데 도움이 되기를 바랍니다. 감사합니다. 내 튜토리얼을 읽어 주셔서 내 튜토리얼이 마음에 들거나 문제나 제안 또는 유형 오류가 있는 경우 댓글을 남겨주세요.