JAVA

JAVA에서 리스트안의 원소를 중복제거하는 방법?

Ambitions 2020. 11. 4. 11:39

개발에서 중복되는 데이터를 제거하는 작업은 빈번하게 일어나게 되는데, 그때 어떤 방법을 이용해서 중복을 제거할 것 인가가 항상 고민이였다, 그래서 활용가능한 방법들을 간단하게나마 정리하려고 한다.

 

먼저 리스트안의 중복을 제거하는 방법은 몇 가지가 있는 것 같은데, 대표적으로 아래와 같은 방법이 있는 것 같다.

1. for문을 이용해 리스트를 순회하며 제거(contains를 이용 or 변수를 이용)

2. Set자료형을 이용하여 중복을 제거

3. Stream의 distinct를 이용하는 방법 

 

이외에 다른 방법이 더 있을 수도 있겠지만, 당장 생각나는 방법만 정리하려고 한다. 백문이불여일견이라고, 코드를 통해 정리 하면 다음과 같다.

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
31
// 클래스 선언부 생략
 
  List<String> data = new ArrayList<>();
  data.add("테스트");
  data.add("테스트");
  data.add("테스트2");
  data.add("테스트3");
 
  // for문을 이용해서 중복을 제거
  List<String> result = new ArrayList<>();
 
  for(String item : data) {
      if(!result.contains(item)) result.add(item);
  }
  System.out.println(result);
 
  // set자료형을 이용한 중복제거
  HashSet<String> result = new HashSet<>();
  for(String item : data) { // for문 이용
      result.add(item);
  }
  result.addAll(data); // addAll로 간단하게
  
  HashSet<String> result2 = new HashSet<>(data); // 더 간단하게
  
  System.out.println(result2);
 
  // JAVA 8 Stream의 distinct를 이용한 중복제거
  List<String> result = data.stream().distinct().collect(Collectors.toList());
  System.out.println(result);
 
cs

크게 어려울만한 내용은 없어서 주석을 보면 이해가 갈 것 같고, set자료형 이용해 중복을 제거할 때에는 리스트안의 원소와 set자료형의 원소가 같아야 된다는 주의점이 있겠다. 

이외에 더 좋은 방법이 있을까 고민해봤지만, 딱히 떠오르는 방법은 DB단에서 쿼리를 이용해 중복을 제거하는 방법도 있겠다만, 이 글은 JAVA에 대해서 정리하는 내용이니 다루지는 않겠다.