필자는 HashSet을 이용하여 중복 요소를 제거하는 방법을 알아보려고 한다.
- Set 인터페이스에서 지원하는 구현 클래스
- 순서대로 입력되지 않고, 일정하게 유지되지 않는게 특징
- 이 클래스의 가장 큰 특징은 중복을 허용하지 않는다는 것이다.
HashSet은 중복을 허용하지 않고, 순서를 보장하지 않는 자료구조입니다. 따라서 중복된 값은 자동으로 제거된다.
간단한 문제를 통해 알아보자.
10개의 값을 입력받고 값에 대해 42를 나머지 한 후, 나머지 값에 대해 중복이 없도록 배열의 크기를 구하라.
int[] arr = new int[10];
ArrayList<Integer> members = new ArrayList<>();
HashSet<Integer> hs = new HashSet<Integer><(members);
members.clear();
members.addall(hs);
전체코드
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[10];
ArrayList<Integer> members = new ArrayList<>();
for(int i=0;i<arr.length;i++){
arr[i] = sc.nextInt();
arr[i] = arr[i] % 42;
members.add(arr[i]);
}
HashSet<Integer> hs = new HashSet<Integer>(members);
members.clear();
members.addAll(hs);
System.out.println(members.size());
}
}
주요 코드 설명
1. HashSet<Integer> hs = new HashSet<Integer>(members);
HashSet 객체 hs를 생성하고, members 리스트를 매개변수로 전달하여 HashSet을 초기화한다.
2. members.clear();
members 리스트를 비운다. 이는 중복을 제거한 결과를 다시 담기 위한 작업이며,
3. members.addAll(hs);
HashSet hs에 저장된 값을 다시 members 리스트에 추가한다.
이를 통해 중복이 제거된 결과를 리스트에 담게 된다.