언어(Language)/Java

[Java] 자바 HashSet 개념 정리 및 활용

잇트루 2022. 9. 22. 04:00
반응형

해시셋 (HashSet)

HashSet은 Set 인터페이스를 구현한 가장 대표적인 컬렉션 클래스이다. 따라서 Set 인터페이스의 특성을 그대로 중복된 값을 허용하지 않으며, 저장 순서를 유지하지 않는다.

 

HashSet에 값을 추가할 때, 해당 값이 중복된 값인지 아닌지 판단하는 과정

  1. add(Object o)를 통해 객체를 저장한다.
  2. 이때, 저장하고자 하는 객체의 해시 코드를 hashCode() 메서드를 통해 얻는다.
  3. Set이 저장하고 있는 모든 객체들의 해시 코드를 hashCode() 메서드를 통해 얻는다.
  4. 저장하고자 하는 객체의 해시 코드와 Set에 이미 저장되어 있는 객체의 해시 코드를 비교한다.
  5. 만약, 같은 해시 코드를 해시 코드를 가진 객체가 존재하지 않는다면, Set에 객체가 추가되며 1번에서 사용한 add(Object o) 메서드가 true를 반환한다. 하지만, 같은 해시 코드를 가진 객체가 존재한다면 아래 6번 과정으로 넘어간다.
  6. equals() 메서드를 통해 객체를 비교한다.
  7. 만약, equals() 메서드에서 true가 리턴된다면, 중복 객체로 간주되어 Set에 추가되지 않으며, add(Object o) 메서드는 false를 반환한다. equals() 메서드에서 false를 반환한다면, Set에 객체가 추가되며, add(Object o) 메서드가 true를 반환한다.

 

다음은 HashSet을 활용하는 예제이다.

import java.util.HashSet;
import java.util.Iterator;

public class HashSetEx {
    public static void main(String[] args) {
        // HashSet 생성
        HashSet<String> hashSet = new HashSet<>();

        // HashSet에 객체 추가
        hashSet.add("Hello");
        hashSet.add("Java");
        hashSet.add("World");
        hashSet.add("hello");
        hashSet.add("java");
        hashSet.add("world");

        // 중복 값 추가
        hashSet.add("Hello");
        hashSet.add("Java");
        hashSet.add("World");

        // iterator 생성
        Iterator i = hashSet.iterator();

        // iterator i를 통해 HashSet을 순회하며 각 요소들을 출력
        while(i.hasNext()) {
            System.out.println(i.next());
        }
    }
}

위 코드를 실행하면, 중복 값은 추가되지 않으며 출력되지 않는다.

HashSet의 추가적인 정보는 공식 문서에서 확인할 수 있다.

https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html

 

반응형