목차

  1. Set의 인터페이스
    1. Set의 메소드
  2. HashSet 이란?
    1. HashSet 생성방법
    2. HashSet 메소드
    3. 예제
  3. TreeSet 이란?
    1. TreeSet 생성방법
    2. TreeSet 메소드
    3. 예제
  4. HahsSet 심화 예제

 

 

1. Set 인터페이스

  • 앞 포스트에서 말한 것 처럼 Set은 '순서를 유지하지 않고, 중복을 허용하지 않는 데이터의 집합'  
  • Set 인터페이스에는 HashSetTreeSet이라는 두 클래스가 존재
  • Set 인터페이스는 Collection 인터페이스를 상속받기 때문에 Collection 메소드 사용 가능
  • 데이터의 중복을 허용하지 않기 때문에 저장 요청이 왔을 때 기존 데이터에 같은 데이터가 있는지 여부를 판단
    • 데이터로 사용될 객체의 equals()와 hashCode() 메서드가 사전에 사용자가 원하는 방식으로 비교될 수 있도록 오버라이딩 

 

 

 

1) Set의 메소드 (HashSet, TreeSet에도 동일하게 적용)

  1. 추가
    1. boolean add(E e) : 기존 데이터에 데이터 e가 없을 경우 데이터 e를 추가 
    2. boolean addAll(Collection<? extends E> c) : 기존 데이터에 없는 컬렉션 c의 모든 데이터를 추가
  2. 확인
    1. boolean contains(Object o) : 특정 객체가 존재하는지 여부  
    2. boolean containsAll(Collenction c) : Collection c 객체가 모두 포함되어 있는지 여부 확인 (포함되어 있으면 true)
    3. boolean isEmpty() : 비어있는지 확인 
    4. int size() : 저장된 객체 수 리턴 
    5. Iterator iterator() : Collection 요소 읽어오기
  3. 삭제
    1. void clear() : 저장된 모든 객체 삭제
    2. boolean remove(Obejct o) : 기존 데이터에서 Object o를 삭제
    3. boolean removeAll(Collection<?> c) : 기존 데이터에서 컬렉션 c의 모든 데이터를 삭제
    4. boolean retainAll(Collection<?> c) : 기존 데이터에서 컬렉션 c와 일치하는 데이터만 남기고 나머지는 삭제

 

 

2. HashSet 이란?

  • 컬렉션의 하나로 중복되지 않는 데이터를 순서에 상관없이 저장
  • 활용 예시 : 회원가입 시 아이디 중복확인 (이는 데이터가 정렬되어있을 필요도 없고, 빠르게 중복되는 값인지만 찾으면 되기 때문에)

 

 

1) HashSet 생성방법

  • HashSet<String> h1 = new HashSet<String>( );              // 기본 capacity는 16, load factor는 0.75
  • HashSet<String> h2 = new HashSet<String>(20);         //  초기 capacity를 20으로 설정 (load factor는 0.75)
  • HashSet<String> h3 = new HashSet<String>(20, 0.8); //  초기 capacity를 20, load factor는 0.8로 설정
  • HashSet<String> h4 = new HashSet<String>(h1);        //  지정된 컬렉션(h1)의 데이터를 가진 HashSet 생성

**capacity 는 해시테이블의 버킷수 (= 저장용량)

    load factor는 해시테이블의 버킷이 얼마나 가득 찼는지 보여주는 수치

    참고로 이 값을 설정하지 않을 경우 기본 capcity 는 16, load factor는 0.75로 설정

 

 

 

2) HashSet 메소드

  1. 반환
    1. Object[ ] toArray( ) : 현재 HashSet의 모든 데이터를 Object 배열로 반환
    2. <T> T[ ] toArray(T[ ] a) : 현재 HashSet의 모든 데이터를 배열 a에 담아 반환

 

 

 

3) 예제

 

 

 

3. TreeSet 이란?

  • 컬렉션의 하나로 중복되지 않는 데이터를 저장하며, Set 인터페이스 중 유일하게 정렬이 가능 (검색 기능이 강화된 컬렉션 프레임워크 구현체)
  • 객체가 저장되는 동시에 자동으로 오름차순으로 정렬 (데이터의 가중치에 따른 순서대로 정렬)

** Tree 라는 자료구조 자체가 데이터를 일정 순서에 의해 정렬하는 구조이며, 거기에 더해진 것이 바로 Set인 중복값 방지 자료구조

 

 

 

1) TreeSet 생성방법

  • TreeSet() : 기본 생성자
  • TreeSet(Collection c) : 주어진 컬렉션을 저장하는 TreeSet 생성
  • TreeSet(Comparator comp) : 주어진 정렬 기준으로 정렬하는 TreeSet 생성

 

 

2) TreeSet 메소드

  1. E first() : 제일 작은 객체를 반환 (오름차순)
  2. E last() : 제일 큰 객체를 반환 (오름차순)
  3. E lower(E e) : 주어진 객체보다 작은 데이터 중 최댓값 반환 (주어진 객체보다 바로 아래 객체를 반환)
  4. E higher(E e) : 주어진 객체보다 큰 데이터 중 최솟값 반환 (주어진 객체보다 바로 위 객체를 반환)
  5. E floor(E e) : 주어진 객체와 같은 객체를 반환 (없다면 주어진 객체보다 작은 데이터 중 최댓값 반환)
  6. E ceiling(E e) : 주어진 객체와 같은 객체를 반환 (없다면 주어진 객체보다 큰 데이터 중 최소값 반환)
  7. E pollFirst() : 제일 작은 객체를 반환하고 컬렉션에서 제거
  8. E pollLast() : 제일 큰 객체를 반환하고 컬렉션에서 제거
  9. SortedSet subSet(E1 fromElement, E2 toElement) : 범위 검색(fromElement와 toElement전)의 결과 반환 >> 부분집합
  10. SortedSet headSet(E toElement) : 지정된 객체 미만의 값의 객체들을 반환
  11. SortedSet tailSet(E fromElement) : 지정된 객체 이상의 값의 객체들을 반환

** 문자열(String) 같은 경우엔 문자의 유니코드 값으로 비교

 

 

 

2) 예제

 

 

 

 

 

 

 

4. HashSet 심화 예제

+ Recent posts