Java 세트 – Java로 설정
자바 세트
이 섹션에서는 Java Set에 대한 몇 가지 중요한 사항에 대해 설명합니다.
- Java Set 인터페이스는 Java Collections Framework의 구성원입니다.
- 목록과 달리 세트는 중복 요소를 추가할 수 없습니다.
- 설정을 사용하면 최대 하나의 null 요소만 추가할 수 있습니다.
- 인터페이스 설정에는 Java 8에서 하나의 기본 메서드인 spliterator가 있습니다.
- 목록 및 배열과 달리 Set은 요소의 인덱스 또는 위치를 지원하지 않습니다.
- Set은 Generics를 지원하며 가능할 때마다 사용해야 합니다. Set과 함께 제네릭을 사용하면 런타임 시 ClassCastException을 피할 수 있습니다.
- 고유한 요소를 유지하기 위해 Set 인터페이스 구현을 사용할 수 있습니다.
Java 세트 클래스 다이어그램
자바 설정 방법
이 섹션에서는 몇 가지 유용한 Java Set 메서드에 대해 설명합니다.
- int size(): Set의 요소 수를 가져옵니다.
- 부울 isEmpty(): Set이 비어 있는지 확인합니다.
- boolean contains(Object o): 이 Set에 지정된 요소가 포함되어 있으면 true를 반환합니다.
- Iterator iterator(): 이 집합의 요소에 대한 반복자를 반환합니다. 요소는 특별한 순서 없이 반환됩니다.
- Object[] toArray(): 이 집합의 모든 요소를 포함하는 배열을 반환합니다. 이 세트가 반복자에 의해 요소가 반환되는 순서를 보장하는 경우 이 메서드는 요소를 동일한 순서로 반환해야 합니다.
- boolean add(E e): 지정된 요소가 아직 존재하지 않는 경우 이 집합에 추가합니다(선택적 작업).
- boolean remove(Object o): 지정된 요소가 있는 경우 이 집합에서 해당 요소를 제거합니다(선택적 작업).
- boolean removeAll(Collection c): 이 세트에서 지정된 컬렉션에 포함된 모든 요소를 제거합니다(선택적 작업).
- boolean retainAll(Collection c): 지정된 컬렉션에 포함된 이 집합의 요소만 유지합니다(선택적 작업).
- void clear(): 세트에서 모든 요소를 제거합니다.
- 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 컬렉션 프로그래밍을 시작하는 데 도움이 되기를 바랍니다. 감사합니다. 내 튜토리얼을 읽어 주셔서 내 튜토리얼이 마음에 들거나 문제나 제안 또는 유형 오류가 있는 경우 댓글을 남겨주세요.