본문 바로가기

프로그래밍언어/JAVA

[JAVA] HashSet, TreeSet

반응형

1. HashSet

 

HashSet 은 Set 인터페이스를 구현한가장 대표적인 컬렉션이다. HashSet 에 데이터를 저장할 때는 add() 또는 addAll() 메서드를 사용하는데 만약에 중복되는 데이터가 이미 존재하는 경우에는 false 를 반환하여 데이터 저장이 실패했다는 것을 알린다.

 

ArrayList 와 같이 List 인터페이스를 구현한 컬렉션과 달리 HashSet 은 저장순서를 저장하지 않는다. 저장순서를 유지하고자 한다면 LinkedHashSet 을 사용해야 한다.

 

메서드 설명
HashSet() HashSet 객체 생성
HashSet(Collection c) 컬렉션 c의 데이터를 포함하는 HashSet 객체를 생성
HashSet(int initialCapacity) 주어진 값을 초기용량으로 하는 HashSet 객체를 생성
HashSet(int initialCapacity, float loadFactor) 초기용량과 load factor 를 지정하는 생성자

※ load factor 는 컬렉션의 저장공간이 몇 퍼센트일때 저장공간을 늘릴지를 정하는 값으로 기본값은 75%, 0.75이다.
boolean add(Object o) 객체를 저장한다.
boolean addAll(Collection c) 컬렉션에 있는 모든 객체를 저장한다.
void clear() 저장된 모든 객체를 삭제한다.
Object clone() HashSet을 복제해서 반환한다. (얕은 복사)
boolean contains(Obejct o) 지정된 객체를 포함하는지 여부를 반환한다.
boolean containsAll(Collection c) 컬렉션의 모든 객체가 포함되어 있는지 여부를 반환한다.
boolean isEmpty() 컬렉션이 비어있는지 여부를 반환한다.
Iterator iterator() Iterator 를 반환한다.
boolean remove(Object o) 객체를 삭제한다.
boolean removeAll(Collection c) 컬렉션 c에 있는 객체와 동일한 객체가 현재 HashSet 에 저장되어 있으면 모두 삭제한다.
boolean retainAll(Collection c) 컬렉션 c에 있는 객체와 동일한 객체만 남기고 나머지 객체는 모두 삭제한다.
int size() 현재 HashSet 의 크기를 반환한다.
Obejct[] toArray() 저장된 객체들을 객체배열의 형태로 반환한다.
Object[] toArray(Obejct[] a) 저장된 객체들을 주어진 객체배열 a에 저장한다.

 

HashSet 은 Set 인터페이스를 구현했기 때문에 중복을 허용하지 않는다. 동일한 데이터인지 비교를 할 때는 equals() 와 hashCode() 메서드를 사용한다. 그렇기 때문에 기본값이 아닌 참조형 객체 간의 비교에서 특정 값이나 조건으로 동일 여부를 판단하기 위해서는 equals() 메서드를 의도에 맞게 오버라이딩 해야한다.

 

-  hashCode()

 

hashCode() 를 오버라이딩 할 때는 다음의 몇가지 조건을 지켜야한다.

 

1) 실행중인 애플리케이션 내의 동일한 객체에 대해서 hashCode() 를 여러번 호출하였을 때, 매번 같은 int 값을 반환하여야 한다. 실행이 중단되고 재실행 되는 등 실행시마다는 다른 값을 반환하여도 된다.

 

2) equals() 메서드를 이용하여 비교하였을 때 true 값을 얻은 객체들은 각각 hashCode() 의 호출 결과도 같아야 한다.

 

3) equals() 메서드를 호출했을 때 false 를 반환하는 두 객체는 hashCode() 의 호출에 대해 같은 int 값을 반환하는 경우가 있어도 괜찮지만, hashing 을 사용하는 컬렉션의 성능을 위해 다른 int 값을 반환하는 것이 좋다.

 

 

2. TreeSet

 

TreeSet 은 이진 검색 트리의 구조로 이루어진 자료구조 컬렉션 클래스이다. 이진 검색 트리 알고리즘 중에서 성능을 향상시킨 레드 블랙 트리로 구현되어 있다. 이 자료구조는 정렬, 검색, 범위검색 등에 높은 성능을 보이는 자료구조이다.

 

이진 검색 트리 구조로 이루어져 있기 때문에 각각의 객체들이 노드로 부모-자식 관계로 연결되어 저장이 된다. 이러한 구조를 유지하기 위해서는 각각의 객체들을 비교할 수 있어야 한다. 그렇기 때문에 TreeSet 에 저장되는 객체가 Comparable 을 구현한 객체이거나 Comparator 를 제공하여 두 객체를 비교할 수 있도록 해야한다. 그렇지 않으면 예외가 발생하게된다.

 

메서드 설명
TreeSet() TreeSet 생성자
TreeSet(Collection c) 컬렉션 c의 값을 모두 저장하는 TreeSet 생성
TreeSet(Comparator comp) 주어진 정렬조건 comp 로 객체들을 비교하는  TreeSet 생성
TreeSet(SortedSet s) 주어진 SortedSet 을 구현하는 컬렉션을 저장하는 TreeSet 생성
boolean add(Object o)
boolean addAll(Collection c)
객체를 저장한다.
Object ceiling(Object o) 객체 o와 같은 객체, 같은 객체가 없는 경우에는 큰 값을 가진 객체 중 가장 가까운 값의 객체를 반환한다. 반환할 객체가 없는 경우에는 null 을 반환한다.
void clear() 저장된 객체를 모두 삭제한다.
Object clone() TresSet 을 복제하여 반환한다.
Comparator comparator() TreeSet 의 정렬기준을 반환한다.
boolean contains(Object o)
boolean containsAll(Collection c)
주어진 객체 또는 컬렉션의 객체들이 해당 자료구조에 모두 들어있는지 확인한다.
NavigableSet descendingSet() TreeSet 에 저장된 요소들을 역순으로 정렬해서 반환한다.
Object first() 정렬된 순서에서 첫번째 객체를 반환한다.
Object floor(Object o) 지정된 객체와 같은 객체, 같은 객체가 없는 경우에는 작은 값 중에서 제일 가까운 값을 반환한다. 반환할 객체가 없는 경우에는 null 을 반환한다.
SortedSet headSet(Object toElement) 지정된 객체보다 작은 값의 객체들을 반환한다.
NavigableSet headSet(Object toElement, boolean inclusive) 지정된 객체보다 작은 값의 객체들을 반환한다. inclusive true 이면 같은 값도 반환한다.
Object higher(Object o) 지정된 객체보다 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환한다.
boolean isEmpty() TreeSet 이 비었는지 확인한다.
Iterator iterator() TreeSet 의 Iterator 를 반환한다.
Object last() 정렬된 순서에서 마지막 객체를 반환한다.
Object lower(Object o) 지정된 객체보다 작은 값을 가진 객체 중 제일 가까운 값의 객체를 반환. 없으면 null 을 반환한다.
Object pollFirst() TreeSet 의 첫번째 요소 (제일 작은 값의 객체) 를 반환한다.
Object pollLast() TreeSet 의 마지막 요소 (제일 큰 값의 객체) 를 반환한다.
boolean remove(Object o) 해당 객체를 삭제한다.
boolean retainAll(Collection c) 주어진 컬렉션에 저장되어 있는 값과 동일한 객체를 제외하고 나머지 객체를 모두 삭제한다.
int size() TreeSet 에 저장된 객체의 개수를 반환한다.
Spliterator spliterator() TreeSet 의 spliterator 를 반환한다.
SortedSet subSet(Object fromElement, Object toElement) 범위검색 (fromElement ~ toElement) 의 결과를 반환하다. (toElement 는 external boundary 이기 때문에 포함하지 않는다.)
SortedSet tailSet(object fromElement) 지정된 객체보다 큰 값의 객체들을 반환한다.
Object[] toArray() 저장된 객체를 객체 배열로 반환한다.
Object[] toArray(Object[] a) 저장된 객체를 주어진 배열에 저장하여 반환한다.

 

반응형

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[JAVA] Properties  (0) 2022.02.04
[JAVA] TreeMap  (0) 2022.02.04
[JAVA] Comparator, Comparable  (0) 2022.01.28
[JAVA] Arrays  (0) 2022.01.27
[JAVA] Iterator, ListIterator, Enumeration  (0) 2022.01.26