본문 바로가기
코딩테스트/문제풀이 팁

중복을 저장하지 않는 배열-HashSet

by asdft 2024. 2. 13.

배열을 만들 때 연산 결과, 중복된 정수가 나오는 경우
: 중복을 허용하지 않는 HashSet 사용

 

HashSet 이란?

Set 인터페이스에서 지원하는 구현 클래스.

 

HashSet의 특징

1. 순서대로 입력되지 않고, 일정하게 유지되지 않음
2.  null 요소 허용
3. 중복 허용 X

 

중복을 걸러내는 과정

HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode()메소드를 호출해서 해시 코드를 얻어낸 다음 저장되어 있는 객체들의 해시 코드와 비교한 뒤 같은 해시 코드가 있다면 다시 equals() 메소드로 두 객체를 비교해서 true가 나오면 동일한 객체로 판단하고 중복 저장을 하지 않습니다.

문자열을 HashSet에 저장할 경우, 같은 문자열을 갖는 String객체는 동일한 객체로 간주되고 다른 문자열을 갖는 String객체는 다른 객체로 간주되는데, 그 이유는 String클래스가 hashCode()와 equals() 메소드를 재정의해서 같은 문자열일 경우 hashCode()의 리턴 값을 같게, equals()의 리턴 값은 true가 나오도록 했기 때문입니다.

 

 

HashSet 변수 선언

HashSet<데이터타입> 변수명 = new HashSet<데이터타입>()

 

여기서 데이터 타입은 기본 타입이 아닌 클래스타입(Wrapper Class)가 와야 합니다.

빨간색 박스, 즉, 제너릭은 클래스 타입이기 때문에 기본 자료형은 오류 발생

 

이때 Wrapper 클래스를 사용해주면 오류를 해결할 수 있다.

 

Wrapper 클래스 : 기본자료형의 클래스화

 

HashSet 값 추가/삭제/크기/검색

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

 

값 추가

set.add(value)

 

값 삭제

set.remove(value)      // 원하는 value값만 삭제

set.clear( )                  // 전부 삭제

 

값 크기

set.size( )

 

검색하기

set.contains(value)        //내부의 원하는 값(value)을 검색하는 경우 사용

 

[출처]

https://crazykim2.tistory.com/474 [차근차근 개발일기+일상:티스토리]

https://jaewon2336.tistory.com/74 [JJJAEOoni:티스토리]