본문 바로가기
[IT] JAVA

[자바] Hash Set 정의 및 사용법 (추가, 삭제, 포함여부, 하나씩 출력, 리스트 변환 및 정렬)

by 오리엔탈킴 2022. 5. 31.

안녕하세요, Java HashSet의 정의와 주요 기능에 관해 정리를 해보도록 하겠습니다.

HashSet

자바의 HashSet은 Set 인터페이스의 구현체로, 중복이 허용되지 않는 자료구조입니다.

입력한 순서(인덱스)가 보장되지 않고, null도 데이터로 입력이 가능한 특징을 가지고 있습니다.

데이터를 입력 시, 기존 저장된 객체 중 같은 hashCode()를 찾고, 같으면 equals() 메서드를 통해 동일 객체인지 판단 후 동일 객체가 아닐 때만 데이터가 저장이 되는 구조입니다.

 

자바 Set 선언 및 데이터 추가

아래와 같이 HashSet을 선언하고 add() 메서드를 통해 값 입력이 가능하며, 입력 시에 중복을 검사하여 중복된 데이터가 있을 시 저장이 되지 않습니다.

Set<Integer> set = new HashSet<>();

set.add(null); // 1개의 null만 등록 가능
set.add(1);
set.add(1); // 중복된 데이터는 등록 안됨

System.out.println("Set 사이즈: " + set.size()); // Set 사이즈: 2

 

자바 Set 데이터 포함 여부 확인

contains() 메서드를 통해, set에 값이 포함되어 있는지 확인하고 true / false를 리턴 받습니다.

System.out.println("1을 포함하나요? " + set.contains(1)); // ture
System.out.println("2를 포함하나요? " + set.contains(2)); // false

 

자바 Set 데이터 삭제

특정 값을 삭제하는 remove() 메서드와 전체 set을 삭제하는 clear() 메서드가 있습니다.

set.remove(1); // 1 삭제
System.out.println("1을 포함하나요? " + set.contains(2)); // false

set.clear(); // 전체 삭제

 

자바 Set 데이터 전체 출력 / 한개씩 출력

toString() 메서드를 통해 전체 값을 출력할 수 있습니다. 그리고 HashSet은 값을 하나씩 직접 꺼낼 수가 없으므로 Iterator에 담아 next() 메서드로 하나씩 출력합니다.

set.add(1);
set.add(2);
set.add(3);

System.out.println(set.toString()); // [1, 2, 3]

Iterator iter = set.iterator();
while(iter.hasNext()){
    System.out.print(iter.next() + " "); // 1 2 3
}

 

자바 Set List로 변환하여 정렬

HashSet은 직접 정렬은 불가능하기 때문에, 아래와 같이 ArrayList로 변환하여 Collections.sort() 메서드를 이용하여 정렬을 합니다.

ArrayList<Integer> list = new ArrayList<>(set); // set을 ArrayList로 변경

Collections.sort(list, (o1,o2) -> o2 - o1); // 내림차순 정렬
System.out.println(list.toString()); // [3, 2, 1]

Collections.sort(list, (o1,o2) -> o1 - o2); // 오름차순 정렬
System.out.println(list.toString()); // [1, 2, 3]

 

반응형

댓글