Set
은 순서에 상관없이, 어떤 데이터가 존재하는지를 확인하기 위한 용도로 많이 사용된다. 다시 말해서, 중복되는 것을 방지하고 원하는 값이 포함되어 있는지를 확인하는 것이 주 용도다.
HashSet
, TreeSet
, LinkedHashSet
이 대표적인 구현 클래스다.
- HashSet : 순서가 전혀 필요 없는 데이터를 Hash Table에 저장한다. Set중에 성능이 가장 좋다.
- TreeSet : 저장된 데이터의 값에 따라서 정렬되는
Set
이다. red-black이라는 Tree타입으로 값이 저장되며, HashSet보다 약간 성능이 느리다.- LinkedHashSet : 연결된 목록 타입으로 구현된 Hash Table에 데이터를 저장한다. 저장된 순서에 따라서 값이 정렬된다. 성능이 3개 중에 가장 나쁘다.
✍ HashSet vs HashTable
✍ red-black-tree 란 ?
각 노드의 색을 붉은 색 혹은 검은색으로 구분하여 데이터를 빠르고, 쉽게 찾을 수 있는 구조의 이진(binary) 트리를 말한다.
📖 Stack 상속 관계
java.lang.Object
↳ java.util.AbstractCollecion
↳ java.util.AbstractSet
↳ java.util.HashSet
Set
은 무엇보다도 데이터가 중복되는 것을 허용하지 않으므로, 데이터가 같은지를 확인하는 작업이 핵심이다.
인터페이스 | 용도 |
---|---|
Serializble | 원격으로 객체를 전송하거나, 파일에 저장할 수 있음을 지정 |
Cloneable | Object 클래스의 clone() 메소드가 제대로 수행될 수 있음을 지정 즉, 복제가 가능한 객체임을 의미한다. |
Iterable<E> | 객체가 "foreach" 문장을 사용할 수 있음을 지정 |
Collection<E> | 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드 지정 |
Set<E> | Set 데이터를 처리하는 것과 관련된 메소드 지정 |
✍ List
와 Set
의 차이
Set
은 순서가 없다. 따라서 매개 변수로 넘어가는 메소드나, 수행 결과가 데이터의 위치와 관련된 메소드는 Set
인터페이스에서는 존재하지 않는다. (get(int index), indexOf(Object o)가 없다.
✍ 로드팩터(load factor)
: (데이터의 개수/저장 공간)을 의미한다. 로드팩터라는 값이 클수록 공간은 넉넉해지지만, 데이터를 찾는 시간이 증가한다.
초기 공간 크기와 로드 팩터의 크기를 고려하여 초기화 하는 것이 중요하다.
📖초기 크기가 (데이터의 개수/저장공간) 보다 클 경우에는 데이터를 쉽게 찾기 위해 재정리 작업이 필요하지 않으므로 성능에 큰 영향을 미치기 때문이다.
📖 주요 메소드
return type | method & args | description |
---|---|---|
boolean | add(E e) | 데이터를 추가한다. |
void | clear() | 모든 데이터를 삭제한다. |
Obejct | clone() | HashSet객체를 복제한다. 하지만 담겨 있는 데이터는 복제하지 않는다. |
boolean | contains(Obejct o) | 지정한 객체가 존재하는지를 확인한다. |
boolean | isEmpty() | 데이터가 있는지 확인한다. |
Iterator | iterator() | 데이터를 꺼내기 위한 Iterator 객체를 리턴한다. |
boolean | remove(Object o) | 매개 변수로 넘어온 객체를 삭제한다. |
int | size() | 데이터의 개수를 리턴한다. |
개인적으로 공부하며 기록한 내용으로, 틀린 내용이 있는 경우 덧글을 달아주시면 감사하겠습니다. 😍