[JAVA] Set

JAVA의 Set의 사용법을 알아본다.

목차

  1. 텍스트 블록
  2. formatted() 메서드
  3. 레코드
  4. 패턴 매칭
  5. case문 개선

Set

  • 데이터 자료구조(데이터 컬렉션) 중 하나로, 특정한 값들을 저장하는 추상자료형
  • List와 다르게 데이터를 중복해서 저장할 수 없음
  • 저장된 데이터를 인덱스로 관리하지 않기 때문에 저장 순서가 보장되지 않음
  • 수학의 유한 집합을 컴퓨터로 구현한 것
  • 특성
    • 데이터를 비순차적으로 저장할 수 있는 순열 자료구조
    • 삽입한 데이터가 순서대로 저장되지 않음
    • 수정 가능(mutable)
    • 중복해서 삽입 불가능
    • Fast Lookup이 필요할 때 주로 쓰임
  • 대표적인 클래스
    • HashSet, TreeSet, LinkedHashSet
  • 클래스들의 주요 메소드
    • add(E e)
      • 리턴타입 : boolean
    • interator()
      • 리턴타입 : Iterator
      • 검색을 위한 반복자 생성
    • size()
      • 리턴타입 : int
    • clear()
      • 리턴타입 : void
    • remove(Object o)
      • 리턴타입 : boolean

HashSet

  • Set 컬랙션을 구현하는 대표적인 클래스
  • 데이터를 중복 저장할 수 없고 순서를 보장하지 않는다.
  • 예시
    •   Set<String> set = new HashSet<String>();
        set.add("one");
        set.add("two");
      
        Interator<String> iter = set.iterator();
              
        while(iter.hasNext()) { //꺼낼 것이 있다면 true 리턴
            System.out.println(iter.next()); //다음 데이터 리턴
        }
      

TreeSet

  • 중복된 데이터를 저장할 수 없고 입력한 순서대로 값을 저장하지 않음
  • TreeSet은 기본적으로 오름차순으로 데이터를 정렬

LinkedHashSet

  • 입력된 순서대로 데이터를 관리한다.
  • 중복된 데이터를 저장할 수는 없음
  • 저장된 데이터의 존재를 빠르게 확인할 수 있지만 내부에 삽입 순서로 정렬된 목록이 포함됨
  • 포켓몬 고와 같은 게임에서 객체가 이미 목록에 있는지 여부를 빠르게 확인하고 목록에 없는 경우 목록에 추가할 수 있음
  • LinkedHashSet vs HashSet
    • HashSet은 HashMap을 사용해 개체를 저장
    • LinkedHashSet은 LinkedHashMap을 사용
    • 삽입 순서를 유지할 필요가 없지만 고유한 개체를 저장해야하는 경우 HashSet이 적합
    • LinkedHashSet의 성능은 HashSet보다 약간 느림