카테고리 없음

[Java]배열 중복값 제거 2

혜wony 2022. 5. 26. 09:51

배열에서 중복값을 제거하는 방법은 두가지 있다.

 

1.Set

2. Stream

 

 

 

 

1.Set

 

Set은 중복된 값을 가지지않는 Collection 이다.

배열을 Set타입으로 변환하면 중복값을 제거할 수 있다.

 

 

1.1 HashSet

 

HastSet은 Set 인터페이스를 구현한 클래스이다.

 

1.배열을 List로 변환하여 hashSet으로 중복을 제거하고

2.다시 List를 배열로 변환한다. 

hashSet은 순서가 없는 Collection이기 때문에,

HashSet을 다시 배열로 변환했을때 원래 배열의 순서를 보장하지 않는다.

 

실행

 
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]

 

 

1.2LinkHashSet

 

LinkedHashSet 또한 중복값을 갖지 않는다.

HashSet과의 차이점

입력된 순서대로 데이터를 관리하기 때문에,

입력된 값의 순서를 보장.

즉 배열의 순서를 지키면서 중복값을 제거할때 사용.

 

 

  코드  

 
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]

 

 

2.Stream / distinct()

 

 

Java8 이후부터는 Stream 을 사용할 수 있다.

 

배열의 Stream 객체를 만든후 

distinct()메소드를 사용하여 중복을 제거함

후에 Stream을 String배열로 다시 변환한다.

 

  코드  

 

 
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]

 

 

 

 

 

 

출처: https://hianna.tistory.com/554 [어제 오늘 내일:티스토리]