List
는 저장 순서가 기록되고 중복도 허용되는 반면, Set
은 저장 순서가 유지되지 않고, 중복 객체도 저장하지 못하게하는 자료구조이다. null
역시 중복을 허용하지 않으므로 1개의 null
만 저장된다.
구현 클래스로는 HashSet
LinkedHashSet
TreeSet
이 있다.
다형성을 활용해 참조변수 타입을 Set
으로 하여 인스턴스를 생성할 수 있다.
Set 주요 메서드
객체 추가 메서드 | 기능 |
---|---|
boolean add(element) | 주어진 객체를 리스트의 멘 뒤에 추가 |
boolean addAll(Collection) | 주어진 컬렉션 타입을 객체 리스트에 추가 |
객체 검색 메서드 | 기능 |
---|---|
boolean contains(Object) | 주어진 객체가 저장되어 있는지 검색 |
Iterator<E> iterator() | 저장된 객체를 한번씩 가져오는 반복자 리턴 |
boolean isEmpty() | 컬렉션이 비어있는지 검사 |
int size() | 저장되어 있는 객체의 수 반환 |
Object[] toArray() | 배열로 변환 |
Object[] toArray(Object[]) | 지정한 배열의 클래스 타입 배열로 반환 |
객체 삭제 메서드 | 기능 |
---|---|
void clear() | 저장된 모든 객체를 삭제 |
boolean remove(Object) | 주어진 객체 삭제 |
boolean removeAll(Collection) | 저장된 모든 객체를 삭제 |
전체 객체 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공
인덱스로 객체에 접근할 수 없음
자료구조 중 Set 의 경우 인덱스가 없기 때문에 반복자 iterator
를 통해 객체에 접근한다.
iterator의 기능
1. 컬렉션에서 요소를 제어하는 기능
2. next() 및 previous()를 써서 앞뒤로 이동하는 기능
3. hasNext()를 써서 더 많은 요소가 있는지 확인하는 기능
Set
에 객체를 저장할 때 hash 함수를 사용하여 처리속도가 빠르다. 동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않는다.
HashSet 예제
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class TestHashSet {
public static void main(String[] args) {
Set<String> hashSet = new HashSet<String>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Mango");
hashSet.add("Melon");
hashSet.add("Orange");
hashSet.add("Banana");
hashSet.add("Mango");
// 저장 순서가 유지되지 않고 중복을 허용하지 않는다.
System.out.println(hashSet); // [Apple, Mango, Orange, Banana, Melon]
Iterator<String> iter = hashSet.iterator();
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println(iter.next());
System.out.println("다음 값이 있는가 ? : " + iter.hasNext()); // true
System.out.println(iter.next());
System.out.println("다음 값이 있는가 ? : " + iter.hasNext()); // false
}
}