본문 바로가기
Old Posts/Java

[Java 예제] Array를 Set으로 변환 예제 코드

by A6K 2020. 12. 30.

Java에서 배열(Array)을 Set 타입으로 변경하는 코드는 다음과 같다.

Set<T> set = new HashSet<>(Arrays.asList(array));

배열을 List로 변경한 다음 HashSet의 생성자에 넘겨주면 된다.

참고로 Arrays.asList(array) 동작은 O(1) 연산이다. 그냥 배열을 리스트 API로 해석할 수 있도록 만들어주는 역할을 할 뿐이다.

List를 HashSet의 생성자로 넘겨주면, 리스트 크기의 해시 테이블을 먼저 만들고 리스트를 순회하면서 엘리먼트들을 하나씩 HashSet에 추가하는 연산을 수행한다. 즉, 최종적으로는 O(n) 동작이다.

Set<T> set = new HashSet<T>();
Collecdtions.addAll(set, array);

결국 풀어쓰면 이 코드와 비슷하다. 하지만 이 코드는 해시 테이블을 중간중간 확장하는 오버헤드가 들어가서 실제로는 조금 더 느리다.

Java 9 이상 버전에서는 불변(Unmodifiable) set을 다음처럼 만들 수 있다.

Set<T> set = Set.of(array);

Java 10 이상 버전에서는 제네릭 타입 조차도 배열에서 유추할 수 있다.

var set = Set.of(array);

댓글