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