일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 문자열
- Button
- Files
- javascript
- 이클립스
- Java
- Eclipse
- 자바
- json
- Visual Studio Code
- Maven
- js
- 테이블
- input
- table
- ArrayList
- CSS
- list
- windows
- vscode
- string
- 자바스크립트
- Array
- IntelliJ
- 인텔리제이
- 배열
- 이탈리아
- CMD
- date
- html
- Today
- Total
어제 오늘 내일
[Java] 배열 중복 값 제거하기 (Set, Stream) 본문
배열에서 중복값을 제거하는 방법입니다.
- Set
- Stream
1. Set
Set은 중복된 값을 가지지 않는 Collection입니다.
따라서, 배열을 Set 타입으로 변환하면, 중복을 제거할 수 있습니다.
1.1 HashSet
HashSet은 Set 인터페이스를 구현한 클래스입니다.
코드
import java.util.Arrays;
import java.util.HashSet;
public class RemoveArrayDuplication {
public static void main(String[] args) {
// 배열 준비
String[] arr = { "H", "E", "L", "L", "O" };
// 배열을 HashSet으로 변환
HashSet<String> hashSet =
new HashSet<>(Arrays.asList(arr));
// HashSet을 배열로 변환
String[] resultArr = hashSet.toArray(new String[0]);
// Dup이 제거된 배열 출력
System.out.println(resultArr.length); // 4
System.out.println(Arrays.toString(resultArr)); // [E, H, L, O]
}
}
결과
4
[E, H, L, O]
위 예제와 같이 HashSet을 이용해서 배열의 중복을 제거할 수 있습니다.
위 예제를 보면 다음 순서로 배열의 중복을 제거하였습니다.
1. 배열을 HashSet으로 변환 (이때, 중복이 제거됩니다)
- 이때, HashSet의 생성자 파라미터로 List 객체를 전달하였습니다.
- [Java] 배열을 List로, List를 배열로 변환하기
2. HashSet을 다시 배열로 변환
- [Java] 배열을 List로, List를 배열로 변환하기
주의할 것은 HashSet은 순서가 없는 Collection이기 때문에,
HashSet을 다시 배열로 변환했을 때, 원래 배열의 순서를 보장하지 않습니다.
따라서, 배열의 순서를 유지해야 한다면,
Set 인터페이스를 구현한 또 다른 클래스인 LinkedHashSet 클래스를 사용해야 합니다.
1.2 LinkedHashSet
LinkedHashSet도 Set 인터페이스를 구현한 클래스이기 때문에,
중복된 값을 가지지 않습니다.
그리고, HashSet과 달리, 입력된 순서대로 데이터를 관리하기 때문에,
입력된 값의 순서를 보장할 수 있습니다.
따라서, 배열의 순서를 보장하면서, 중복을 제거해야 할 때는 LinkedHashSet을 사용합니다.
코드
import java.util.Arrays;
import java.util.LinkedHashSet;
public class RemoveArrayDuplication {
public static void main(String[] args) {
// 배열 준비
String[] arr = { "H", "E", "L", "L", "O" };
// 배열을 LinkedHashSet으로 변환
LinkedHashSet<String> linkedHashSet =
new LinkedHashSet<>(Arrays.asList(arr));
// LinkedHashSet을 배열로 변환
String[] resultArr = linkedHashSet.toArray(new String[0]);
// Dup이 제거된 배열 출력
System.out.println(resultArr.length); // 4
System.out.println(Arrays.toString(resultArr)); // [H, E, L, O]
}
}
결과
4
[H, E, L, O]
위 예제에서는 LinkedHashSet을 사용했기때문에,
최종 결과를 보면,
중복은 제거되고, 나머지 원소들의 순서는 유지된 것을 확인할 수 있습니다.
( 배열을 List로, List를 배열로 변환하는 방법은 이 링크를 참조하세요)
2. Stream / distinct()
Java 8 이후부터는 Stream을 사용해서 배열의 중복을 제거할 수 있습니다.
코드
import java.util.Arrays;
public class RemoveArrayDuplication {
public static void main(String[] args) {
// 배열 준비
String[] arr = { "H", "E", "L", "L", "O" };
// 배열 => strem => 중복제거 => 배열
String[] resultArr = Arrays.stream(arr).distinct().toArray(String[]::new);
// Dup이 제거된 배열 출력
System.out.println(resultArr.length); // 4
System.out.println(Arrays.toString(resultArr)); // [H, E, L, O]
}
}
결과
4
[H, E, L, O]
배열의 Stream 객체를 만든 후,
distinct() 메소드를 사용하여 중복을 제거하였습니다.
그리고, 다시 toArray() 메소드를 사용하여,
Stream을 String배열로 다시 변환하였습니다.
Set과 Stream을 이용하여 배열의 중복값을 제거하는 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] List에 특정 값이 포함되어 있는지 확인하기 (1) | 2021.05.04 |
---|---|
[Java] List를 Set으로, Set을 List로 변환하기 (0) | 2021.05.03 |
[Java] 배열 합계/평균 계산하기 (반복문, Stream) (0) | 2021.05.03 |
[Java] int 배열을 List로 변환하기 (2) | 2021.05.02 |
[Java] 배열을 List로, List를 배열로 변환하기 (1) | 2021.05.02 |