일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS
- list
- Visual Studio Code
- 배열
- Maven
- Files
- date
- string
- ArrayList
- Button
- 문자열
- Array
- Eclipse
- input
- 자바
- IntelliJ
- 인텔리제이
- vscode
- js
- Java
- 테이블
- json
- javascript
- windows
- 이탈리아
- 자바스크립트
- html
- 이클립스
- table
- CMD
- Today
- Total
어제 오늘 내일
[Java] List를 Set으로, Set을 List로 변환하기 본문
List를 Set으로, Set을 List로 변환하는 방법을 정리하였습니다.
- List를 Set으로
- 생성자(Constructor)
- Set.copyOf() - (Java 10 이후, unmodifiable)
- Set을 List로
- 생성자(Constructor)
- List.copyOf() - (Java 10 이후, unmodifiable)
1. List를 Set으로
1. 1 생성자(Constructor)
코드
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListToSet {
public static void main(String[] args) {
// List 준비
List<String> list = Arrays.asList("L", "I", "S", "T");
// Set으로 변환 (생성자)
Set<String> set = new HashSet<>(list);
// 결과 출력
System.out.println(set);
}
}
결과
[S, T, I, L]
HashSet은 Set 인터페이스를 구현하는 클래스입니다.
HashSet의 생성자에 List 객체를 전달하여, List를 Set으로 변환하였습니다.
Set 객체는 순서를 보장하지 않기 때문에, Set을 출력한 결과는 List의 순서와 다릅니다.
1. 2 Set.copyOf() - (Java 10 이후, unmodifiable)
Java 10 이후에는 Set의 static 메소드인 copyOf() 메소드를 이용하여,
List를 Set으로 바꿀수 있습니다.
단, 이때 Set.copyOf() 메소드가 리턴하는 Set 객체는 unmodifiable 객체로,
더 이상 값을 추가하거나, 삭제, 변경할 수 없습니다.
(Read Only 상태와 비슷합니다)
코드 1
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class ListToSet {
public static void main(String[] args) {
// List 준비
List<String> list = Arrays.asList("L", "I", "S", "T");
// Set으로 변환 (copyOf())
Set<String> set = Set.copyOf(list);
// 결과 출력
System.out.println(set);
}
}
결과 1
[S, T, L, I]
Set.copyOf() 메소드에 List 객체를 전달하여 Set 객체로 변환하였습니다.
코드 2 - unmodifiable set 수정
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class ListToSet {
public static void main(String[] args) {
// List 준비
List<String> list = Arrays.asList("L", "I", "S", "T");
// Set으로 변환 (copyOf())
Set<String> set = Set.copyOf(list);
// Set객체에 값 추가
set.add("!"); // Exception 발생
// 결과 출력
System.out.println(set);
}
}
결과 2
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:72)
at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:76)
at ListToSet.main(ListToSet.java:14)
Set.copyOf() 메소드가 리턴하는 Set 객체는 unmodifiable 객체로,
이 객체에 위와 같이 값을 추가하거나, 변경, 삭제를 시도하면 Exception이 발생합니다.
2. Set을 List로
2.1 생성자(Constructor)
코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetToList {
public static void main(String[] args) {
// Set 준비
Set<String> set = new HashSet<>(Arrays.asList("L", "I", "S", "T"));
// Set을 List로 변환 (생성자)
List<String> list = new ArrayList<>(set);
// 결과 출력
System.out.println(list); // [S, T, I, L]
}
}
결과
[S, T, I, L]
List 인터페이스를 구현하는 ArrayList의 생성자 파라미터로 Set 객체를 전달하여
Set객체를 List로 변환하였습니다.
2.2 List.copyOf() - (Java 10 이후, unmodifiable)
Set 클래스와 마찬가지로, List 클래스도
Java 10 이후, List의 static 메소드인 copyOf() 메소드를 사용하여,
Set 객체를 List로 변환할 수 있습니다.
List.copyOf() 메소드가 반환하는 List 객체 역시 unmodifiable 이기 때문에,
이 객체에 데이터를 추가, 수정, 삭제 할 수 없습니다.
코드 1
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetToList {
public static void main(String[] args) {
// Set 준비
Set<String> set = new HashSet<>(Arrays.asList("L", "I", "S", "T"));
// Set을 List로 변환 (List.copyOf())
List<String> list = List.copyOf(set);
// 결과 출력
System.out.println(list); // [S, T, I, L]
}
}
결과 1
[S, T, I, L]
List.copyOf() 메소드를 사용하여 Set 객체를 List 객체로 리턴하였습니다.
코드 2 - unmodifiable list 수정
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetToList {
public static void main(String[] args) {
// Set 준비
Set<String> set = new HashSet<>(Arrays.asList("L", "I", "S", "T"));
// Set을 List로 변환 (List.copyOf())
List<String> list = List.copyOf(set);
// unmodifiable List 값 추가
list.add("!"); // Exception 발생
// 결과 출력
System.out.println(list); // [S, T, I, L]
}
}
결과 2
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:72)
at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:76)
at SetToList.main(SetToList.java:16)
Set.copyOf() 메소드와 마찬가지로,
List.copyOf() 메소드도 unmodifiable 객체를 리턴하기 때문에,
이 객체에 값을 추가하면 Exception이 발생합니다.
Java의 List를 Set으로, Set을 List로 변환하는 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] 대소문자 구분없이 문자열 비교하기 (0) | 2021.05.04 |
---|---|
[Java] List에 특정 값이 포함되어 있는지 확인하기 (1) | 2021.05.04 |
[Java] 배열 중복 값 제거하기 (Set, Stream) (0) | 2021.05.03 |
[Java] 배열 합계/평균 계산하기 (반복문, Stream) (0) | 2021.05.03 |
[Java] int 배열을 List로 변환하기 (2) | 2021.05.02 |