[Java Collection]HashSet, LinkedHashSet

Jason·2024년 2월 14일
0
post-thumbnail

HashSet과 LinkedHashSet: 특징과 차이점

Java의 HashSetLinkedHashSet은 Set 인터페이스를 구현한 클래스로, 중복을 허용하지 않는 데이터의 집합을 관리할 때 사용됩니다. 두 클래스는 유사해 보일 수 있지만, 내부 구현과 사용 사례에 있어 중요한 차이점을 가지고 있습니다.


HashSet

  • 중복 허용 안 함: 같은 값을 가진 요소의 추가 시도는 무시됩니다.
  • 순서 보장 안 함: 요소의 추가 순서와 관계없이, 내부 해시 함수에 따라 요소가 저장됩니다.
  • 빠른 접근 속도: 해시 함수를 사용하여 요소의 존재 여부를 빠르게 확인할 수 있습니다.

HashSet은 주로 요소의 중복을 방지하면서 순서가 중요하지 않은 데이터 집합을 관리할 때 사용됩니다.

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();

        // 요소 추가
        numbers.add(2);
        numbers.add(3);
        numbers.add(1);

        // 요소 순회
        for (int number : numbers) {
            System.out.println(number);
        }

        // 요소 삭제
        numbers.remove(2);

        // 특정 요소 포함 여부 확인
        if (numbers.contains(3)) {
            System.out.println("HashSet contains 3");
        }
    }
}

LinkedHashSet

  • 중복 허용 안 함: HashSet과 마찬가지로 중복된 요소의 추가는 허용되지 않습니다.
  • 순서 보장: 요소가 추가된 순서대로 요소를 순회할 수 있습니다.
  • 빠른 접근 속도: HashSet과 유사한 속도로 요소의 존재 여부를 확인할 수 있으면서도, 요소의 순서를 유지합니다.

LinkedHashSet은 중복을 허용하지 않으면서도 요소의 삽입 순서를 유지해야 할 때 유용합니다. 예를 들어, 사용자가 입력한 데이터의 순서를 보존하면서 중복을 제거해야 하는 경우에 적합합니다.

import java.util.LinkedHashSet;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        LinkedHashSet<Integer> orderedNumbers = new LinkedHashSet<>();

        // 요소 추가
        orderedNumbers.add(2);
        orderedNumbers.add(3);
        orderedNumbers.add(1);

        // 요소 순회
        for (int number : orderedNumbers) {
            System.out.println(number); // 순서대로 출력됨: 2, 3, 1
        }

        // 요소 삭제
        orderedNumbers.remove(3);

        // 특정 요소 포함 여부 확인
        if (orderedNumbers.contains(1)) {
            System.out.println("LinkedHashSet contains 1");
        }
    }
}

차이점

  • 순서 유지: HashSet은 요소의 순서를 유지하지 않는 반면, LinkedHashSet은 요소가 추가된 순서를 유지합니다.
  • 성능 차이: LinkedHashSet은 요소의 순서를 유지하기 위해 추가적인 메모리를 사용하며, 이로 인해 아주 미세하게 HashSet보다 느릴 수 있습니다. 그러나 대부분의 경우 이 차이는 무시할 수 있을 정도입니다.
  • 사용 사례: 순서가 중요하지 않고 데이터의 중복만 제거하고 싶을 때는 HashSet이 적합합니다. 반면, 요소의 삽입 순서를 유지하면서 중복을 제거해야 할 경우 LinkedHashSet이 더 적합합니다.

결론

HashSetLinkedHashSet 사이의 선택은 요소의 순서 유지 여부와 애플리케이션의 성능 요구사항에 따라 결정됩니다. 데이터의 순서가 중요하지 않다면 HashSet을, 순서가 중요하다면 LinkedHashSet을 사용하는 것이 좋습니다.

profile
어제보다 매일 1% 성장하고 있습니다.

0개의 댓글