원래 한 게시글에 컬렉션 프레임워크를 전부 작성하려고 했는데
생각보다 글 작성에 시간이 오래 걸려서 분리하게 되었다.
그럼 이어서 SET에 해당되는 인터페이스에 대해 알아보자.
오늘 알아볼 부분은 아래와 같다.
SET
Set 인터페이스를 구현한 모든 Set 컬렉션 클래스의 성질은 다음과 같다.
- 요소의 저장 순서를 유지하지 않음
- 같은 요소의 중복 저장을 허용하지 않음
이와 같은 이유로 알고리즘에서 중복된 값을 분리해서 사용할 때 많이 사용하였다.
이전에 풀이했던 알고리즘 문제 중에 사용한 예시이다.
그렇다면 Set 인터페이스의 대표적인 메서드는 어떤 것들이 있을까
이전 글에서 작성한 Collection 인터페이스에서 정의한 메서드들이 주로 사용하는 메서드들이다.
타입 | 메서드 | 설명 |
boolean | add(E e) | 해당 컬렉션의 전달된 요소를 추가함 |
void | clear() | 해당 컬렉션의 모든 요소를 제거함 |
boolean | contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함 |
boolean | equals(Obeject o) | 해당 컬렉션과 전달된 객체가 같은지를 확인함 |
boolean | isEmpty() | 해당 컬렉션이 비어있는지를 확인함 |
boolean | remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함 |
int | size() | 해당 컬렉션의 요소의 총 개수를 반환함 |
Object[] | toArray() | 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함 |
HashSet
HashSet은 Set 컬렉션 클래스 중에서 가장 많이 사용되는 클래스 중 하나이다.
위에서 예시로 든 알고리즘 문제에서도 HashSet을 사용하였다.
만약 HashSet을 사용하면서 요소의 저장 순서를 유지하고 싶다면 LinkedHashSet 클래스를 사용하면 된다.
HashSet은 그렇다면 어떻게 중복을 걸러낼까
먼저 객체를 저장하기 전에 객체의 hashCode() 메서드를 호출해서 해시 코드를 얻어낸 다음 저장된 해시 코드와 비교해서 같은 해시 코드가 있다면 equals() 메서드로 두 객체를 비교하고 동일하다고 판단이 되면 저장이 이루어지지 않는다.
TreeSet
TreeSet 은 SortedSet 인터페이스를 구현하고 있는데
SortedSet 은 중복 저장을 허용하지않는 Set 특성과 함께 추가적으로 정렬을 수행한다.
따라서 TreeSet 역시 정렬 기능을 추가적으로 제공한다.
TreeSet 에서 기본적인 Collection, Set 메서드 이외에 사용하는 메서드들은 다음과 같다.
타입 | 메서드 | 설명 |
NavigableSet<E> | descendingSet() | 내림차순으로 정렬된 NavigableSet을 반환함 |
NavigableSet<E> | subset(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | 첫 번째와 세번째 매개변수로 전달된 값에 해당되는 범위를 조회하는데 두번째, 네번째 boolean을 통해 시작지점과 끝지점의 값도 포함할지 선택 |
SortedSet<E> | subset(E fromElement, E toElement) | 첫 번째부터 두번째 매개변수로 전달된 값에 해당하는 요소의 바로 직전까지 반환 (마지막 매개변수 포함 X) |
해당 메서드외에 전체 메서드는 아래를 참고하면 된다.
마지막으로 다음 글에서는 Map에 대해서 알아보자
자바 컬렉션 프레임워크(Java Collection Framework) 목록
자바 컬렉션 프레임워크(Java Collection Framework) 중 리스트(List) 정리
자바 컬렉션 프레임워크(Java Collection Framework) 중 맵(MAP) 정리
참고한 사이트
'Computer Science > JAVA' 카테고리의 다른 글
JVM? GC? 는 무엇을 의미하는지 간단히 알아보기 (0) | 2022.06.22 |
---|---|
자바 컬렉션 프레임워크(Java Collection Framework) 중 맵(MAP) 정리 (0) | 2022.04.18 |
자바 컬렉션 프레임워크(Java Collection Framework) 중 리스트(List) 정리 (0) | 2022.04.13 |
[JAVA] 객체 지향 프로그래밍(Object Oriented Programing) (0) | 2022.01.11 |
JAVA의 장점과 단점 (1) | 2021.12.20 |