Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 ArrayList에서 중복 요소 제거하는 방법 완벽 가이드

이 글에서는 Java의 ArrayList(배열 목록)에서 중복된 요소를 제거하는 방법을 알아보겠습니다. 리스트(List)는 요소를 순차적으로 저장하고 접근할 수 있는 순서가 있는 컬렉션입니다. 인덱스 기반 메서드를 통해 요소의 삽입, 수정, 삭제, 검색이 가능하며, 중복 요소도 허용합니다.

그렇다면 중복을 제거하려면 어떻게 해야 할까요? 핵심 아이디어는 간단합니다. Set은 중복 값을 가질 수 없다는 특성을 활용하는 것입니다. 리스트를 Set으로 변환하면 자동으로 중복이 제거되며, LinkedHashSet을 사용하면 원래의 삽입 순서까지 유지할 수 있습니다.

예제 시나리오

먼저 예제를 통해 살펴보겠습니다.

입력값:

정의된 리스트: [Java, Scala, Python, Java]

기대 출력값:

중복 제거 후 리스트: [Java, Scala, Python]

알고리즘

전체 과정은 다음과 같은 단계로 진행됩니다.

Step 1 - 시작
Step 2 - input_list라는 이름의 리스트와 result_set이라는 이름의 Set을 선언한다.
Step 3 - 값을 정의한다.
Step 4 - Set은 중복 값을 가질 수 없으므로 입력 리스트를 Set으로 변환한다.
Step 5 - 결과를 출력한다.
Step 6 - 종료

방법 1: main 함수에서 모든 작업 처리

첫 번째 방법은 모든 연산을 main 함수 안에서 직접 처리하는 방식입니다.

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class Demo {
   public static void main(String[] args) {
      System.out.println("필요한 패키지가 임포트되었습니다");
      List<String> input_list = new ArrayList<String>();
      input_list.add("Java");
      input_list.add("Scala");
      input_list.add("Python");
      input_list.add("Java");
      System.out.println("정의된 리스트: " +input_list.toString());
      Set<String> result_set = new LinkedHashSet<String>(input_list);
      System.out.println("중복 제거 후 리스트: "+result_set);
   }
}

출력 결과

필요한 패키지가 임포트되었습니다
정의된 리스트: [Java, Scala, Python, Java]
중복 제거 후 리스트: [Java, Scala, Python]

방법 2: 객체 지향 방식으로 함수 분리

두 번째 방법은 중복 제거 로직을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일에 맞게 구현하는 것입니다. 코드의 재사용성과 가독성이 향상되므로 실무에서 더 권장되는 방식입니다.

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class Demo {
   static void remove_duplicates(List<String> input_list){
      Set<String> result_set = new LinkedHashSet<String>(input_list);
      System.out.println("중복 제거 후 리스트: "+result_set);
   }
   public static void main(String[] args) {
      System.out.println("필요한 패키지가 임포트되었습니다");
      List<String> input_list = new ArrayList<String>();
      input_list.add("Java");
      input_list.add("Scala");
      input_list.add("Python");
      input_list.add("Java");
      System.out.println("정의된 리스트: " +input_list.toString());
      remove_duplicates(input_list);
   }
}

출력 결과

필요한 패키지가 임포트되었습니다
정의된 리스트: [Java, Scala, Python, Java]
중복 제거 후 리스트: [Java, Scala, Python]

핵심 포인트 정리

  • LinkedHashSet 사용 이유: 일반 HashSet 대신 LinkedHashSet을 사용하면 중복 제거와 동시에 원본 리스트의 삽입 순서를 그대로 유지할 수 있습니다.
  • Set의 특성 활용: Set 컬렉션은 정의상 중복 요소를 허용하지 않으므로, 리스트를 Set으로 변환하는 것만으로 중복이 자동으로 제거됩니다.
  • 함수 분리의 장점: 중복 제거 로직을 별도 메서드로 분리하면 코드 재사용성이 높아지고 유지보수가 쉬워집니다.

두 방법 모두 동일한 결과를 출력하지만, 상황에 따라 적절한 방식을 선택하여 사용하시기 바랍니다.