Java/개념정리

[Java] HashSet 에 대해 알아보자

Sehyeok20 2023. 10. 30. 13:08
반응형

Set Interface

기본적으로 Set혹은 Set계열을 구현하는 클래스들은 다음과 같은 공통점이 있다.

  • 중복되는 요소(원소)를 허용하지 않는다.
  • 저장 순서를 유지하지 않는다. (LinkedHashSet 만 예외)

HashSet

HashSet은 Set 인터페이스에서 지원하는 구현 클래스이기 때문에 Set의 성질을 그대로 상속받는다는 것이 특징이다.

여기서 HashSet 은 Set의 특징에 더해 null값을 허용해주는 특징을 하나 더 가진다.

  • 중복되는 요소(원소)를 허용하지 않는다.
  • 저장 순서를 유지하지 않는다. 
  • null값을 허용한다.

 

이러한 HashSet은 어떨 때 쓰이면 좋을까?

데이터가 정렬되어있을 필요도 없고, 빠르게 중복 여부만 확인하면 되는 경우에 사용하기 좋다.

예를 들면 회원 가입시 아이디의 중복 확인과 같은 존재 여부의 탐색에 용이하다.

 

HashSet 사용법

Hash 생성

// 타입을 지정 가능
HashSet<String> user1 = new HashSet<String>();

// 타입을 생략하여 사용 가능 -> 빈 HashSet생성 시 사용
HashSet<String> user2 = new HashSet<>();  

// 초기 용량(Capacity) 설정
HashSet<String> user3 = new HashSet<>(10); 

 // user1의 모든 값을 가진 HashSet 생성 
HashSet<String> user4 = new HashSet<>(user1);

//초기값 지정 가능
HashSet<String> user5 = new HashSet<>(Arrays.asList("Sean", "John", "Mason"));

 

메소드

출처 : https://st-lab.tistory.com/238

메소드는 위 사진처럼 추가, 삭제, 존재여부, 비교, 비어있는지의 여부, 크기, 전체삭제 등 여러 메소드를 제공하는데 이외에도 다양한 메소드가 있으니 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Set.html 참조.

 

많이 쓰이는 메소드들의 사용 예시는 다음과 같다.

HashSet<String> user = new HashSet<>(Arrays.asList("Sean", "John", "Mason"));

// 요소 추가
user.add("Jenny"); 

// 요소 삭제
user.remove("Sean");

// user 크기 : 3
System.out.println(user.size());

// user내부에 값 "Sean"이 있다면 true 출력, 없다면 false 출력
System.out.println(user.contains("Sean")); 

// 출력결과 : [Mason, John, Jenny]
System.out.println(user); 
		
// import java.util.Iterator 추가 필요
Iterator iter = user.iterator();	 

// hasNext() : 가져올 객체가 있다면 true 리턴, 없다면 false 리턴
// next() : Iterator에서 하나의 객체를 가져올 수 있는 메소드
while(iter.hasNext()) {
    System.out.println(iter.next());
}

// 비어있는지 여부 확인. 결과 : false
System.out.println(user.isEmpty());

// 모든 값 제거
user.clear();
// 출력결과 : []
System.out.println(user);

// 비어있는지 여부 확인. 결과 : true
System.out.println(user.isEmpty());

 

조금 더 자세한 원리를 확인하기 위해서는 아래의 포스팅을 참고하면 되겠다.

https://www.blog.ecsimsw.com/entry/%EC%9E%91%EC%84%B1-%EC%A4%91-%EC%9E%90%EB%B0%94-HashSet%EC%9D%98-%EC%9B%90%EB%A6%AC

 

자바 깊이 알기 / HashSet의 원리

HashSet의 출력이 고정된 것 같아 (@조엘) 우아한테크코스에서 함께 공부하는 친구가 좋은 대화 주제를 찾아주었다. 어느날 찾아와서는 HashSet의 순서에도 뭔가 규칙이 있을 것 같다는 얘기를 하는

www.blog.ecsimsw.com

 

반응형