닫기
배열의 중복 Element 제거는 알고리즘 문제에서 자주 사용하는 로직입니다.
중복 제거 방법은 크게 Set 자료구조를 사용한 방법과 Stream의 함수를 사용하는 방법이 있습니다.
Set 자료 구조를 사용한 방법
java.util.Set<E>을 구현하는 HashSet을 사용합니다. Set 자료구조는 중복된 값을 가지지 않는 Collection입니다.
Java의 Set은 중복된 값을 다시 입력했을 때 Exception을 발생시키지 않고 무효하게 처리합니다.
결과적으로 단순히 모든 값을 Set에 입력하는 것만으로도 중복 제거가 가능합니다.
java
닫기// 중복 제거하는 배열입니다.
String[] input = new String[] { "H", "E", "L", "L", "O", "W", "O", "R", "L", "D", "!" };
Set<String> filtered = new HashSet<>(Arrays.asList(input));
String[] output = filtered.toArray(new String[filtered.size()]);
// 중복 제거 결과를 출력합니다.
System.out.println(Arrays.toString(output));
코드 | 비고 | |
중복 제거하는 배열을 사용해 |
||
HashSet을 다시 |
입력된 코드의 출력 결과를 확인합니다.
shell
닫기[!, R, D, E, W, H, L, O]
더보기
HashSet은 순서가 없는 Collection이기 때문에 기존 정렬을 유지하지는 않습니다.
기존 배열의 순서를 보장하려면 LinkedHashSet을 사용합니다.
shell
닫기[H, E, L, O, W, R, D, !]
Stream을 사용한 방법
Java 8부터는 Stream을 사용 할 수 있습니다. Stream을 사용하면 구현된 코드를 간결하게 구성 할 수 있습니다.
java
닫기// 중복 제거하는 배열입니다.
String[] input = new String[] { "H", "E", "L", "L", "O", "W", "O", "R", "L", "D", "!" };
String[] output = Arrays.stream(input).distinct().toArray(String[]::new);
// 중복 제거 결과를 출력합니다.
System.out.println(Arrays.toString(output));
코드 | 비고 | |
배열을 사용해 |
||
Stream에서 |
||
Stream 객체를 다시 |
입력된 코드의 출력 결과를 확인합니다. 예시의 LinkedHashSet처럼 기존 배열의 순서 역시 보장합니다.
shell
닫기[H, E, L, O, W, R, D, !]
더보기
distinct()는 Stream에 저장된 객체 간 중복 검사를 위해 Object.equals(Object)를 호출합니다.
java
닫기public boolean equals(Object obj) {
return (this == obj);
}
정리 및 복습
- 배열에서 Element 중복을 제거하려면
Set또는Stream을 사용합니다. - Set은
중복된 값을 허용하지 않는 Collection입니다. - Set에
단순히 모든 값을 Set에 입력하는 것만으로도 중복 제거가 가능합니다. Set을 구현하는 자료구조는 HashSet과 LinkedHashSet이 있습니다.
Set | HashSet | LinkedHashSet |
중복된 값을 허용하지 않습니다. |
중복된 값을 허용하지 않습니다. |
- Stream의
distinct()를 사용하면 Stream에 저장된 값의 중복을 제거합니다. - Stream은
Java 8부터 사용 할 수 있습니다.
'Java > Java SE, EE' 카테고리의 다른 글
Windows에서 OpenJDK 17 버전 설치 (0) | 2023.12.27 |
---|---|
배열 int[]와 Integer[]간에 상호 캐스팅하기 (0) | 2023.12.07 |
Azure AD와 MSAL4J를 사용한 SSO(Single Sign-On) 로그인 인증 구현 (0) | 2023.11.28 |
데이터 표현을 위한 Record 클래스 (0) | 2023.11.27 |
macOS에서 OpenJDK 17 버전 설치 (0) | 2023.11.07 |