List 컬렉션은 객체의 저장 순서를 유지하지만, Set 컬렉션은 저장 순서가 유지되지 않는다. 또한 객체를 중복 저장할 수 없고, 하나의 null만 저장 가능하다.
Set 컬렉션에는 HashSet, LinkedHashSet, TreeSet 등이 있다. 다음은 Set 컬렉션에서 공통적으로 사용 가능한 Set 인터페이스의 메소드이다.
객체 추가 | boolean add(E e) | 주어진 객체 저장 |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 조사 |
boolean isEmpty() | 컬렉션이 비어 있는지 조사 | |
iterator<E> iterator() | 저장된 객체를 한 번씩 가져오는 반복자 리턴 | |
int size() | 저장되어 있는 전체 객체 수 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체 삭제 |
boolean remove(Object o) | 주어진 객체 삭제 |
Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없는 대신 전체 객체를 대상으로 반복해서 가져오는 반복자(iterator)를 제공한다. 반복하는 Iterator 인터페이스를 구현한 객체로, iterator() 메소드를 호출하면 얻을 수 있다.
Ierator 인터페이스에 선언된 메소드들이다.
boolean | hashNext() | 가져올 객체가 있으면 true 없으면 false 리턴 |
E | next() | 컬렉션에서 하나의 객체를 가져옴 |
void | remove() | Set 컬렉션에서 객체 제거 |
HashSet
Set 인터페이스의 구현 클래스 중 HashSet이 많이 사용된다. HashSet을 생성하기 위해 다음과 같이 기본 생성자를 호출한다.
Set<E> set = new HashSet<E>();
HashSEt은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다. 동일한 객체란 같은 인스턴스를 뜻하지는 않는다. 객체를 저장하기 전에 먼저 객체의 hashCode() 메소드를 호출해 해시코드를 얻어내고, 이미 저장된 객체들의 해시코드를 비교한다. 동일한 해시코드가 있다면 다시 equals() 메소드로 두 객체를 비교해 true가 나오면 동일한 객체로 판단해 중복 저장을 하지 않는다.
'개발 관련 > Java' 카테고리의 다른 글
[혼공자] LIFO와 FIFO 컬렉션(Stack, Queue) (0) | 2022.04.28 |
---|---|
[혼공자] 컬렉션 프레임워크(Collection Framework) #03 Map (0) | 2022.04.28 |
[혼공자] 컬렉션 프레임워크(Collection Framework) #01 List(ArrayList, Vector, LinkedList) (0) | 2022.04.28 |
[혼공자] 멀티 스레드(multi thread) #01 메인 스레드와 작업 스레드 (0) | 2022.04.27 |
[혼공자] 멀티 스레드(multi thread) #01 메인 스레드와 작업 스레드 (0) | 2022.04.27 |