- Set은 저장 순서를 유지하지 않는 구조를 가지고 있다.
- 중복되는 객체를 저장할 수 없고 null도 중복을 허용하지 않기 때문에 1개만 저장할 수 있다.
- 인덱스로 관리하지 않기 때문에 인덱스를 매개 값으로 갖는 메소드가 없다.
- 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.
| 리턴 타입 | 메소드 | 설명 |
|---|
| boolean | add(E e) | 주어진 객체를 추가한다. |
| boolean | addAll(Collection<? extends E> c) | 주어진 Collection 타입 객체를 Set에 추가한다. |
| boolean | contains(Object o) | 주어진 객체가 저장되어 있는지를 확인한다. |
| Iterator | iterator() | 저장된 객체를 한 번씩 가져오는 반복자 리턴한다. |
| boolean | isEmpty() | 컬렉션이 비어 있는지 조사한다. |
| int | size() | 저장되어 있는 전체 객체수를 리턴한다. |
| void | clear() | 저장된 모든 객체를 삭제한다. |
| boolean | remove(Object o) | 주어진 객체를 삭제한다. |
HashSet
- Set 인터페이스의 구현 클래스이다.
- HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.
- 내부적으로 hashCode(), equals() 메소드를 사용해서 중복된 객체를 확인한다.
public void method1(){
Set<String> set = new HashSet<>();
set.add(null);
set.add("반갑습니다.");
set.add(new String("반갑습니다."));
set.add("여러분");
set.add("안녕하세요.");
set.add("여러분");
set.add(null);
System.out.println(set);
System.out.println(set.size());
System.out.println(set.isEmpty());
System.out.println();
}
[null, 안녕하세요., 여러분, 반갑습니다.]
4
false
LinkedHashSet
- Set 인터페이스의 구현 클래스이다.
- HashSet과 동일하지만 입력된 순서대로 데이터를 관리한다.
- iteration 작업을 할 경우, Set에 삽입된 순서대로 접근한다.
public void method1(){
Set<String> set = new LinkedHashSet<>();
set.add(null);
set.add("반갑습니다.");
set.add(new String("반갑습니다."));
set.add("여러분");
set.add("안녕하세요.");
set.add("여러분");
set.add(null);
System.out.println(set);
System.out.println(set.size());
System.out.println(set.isEmpty());
System.out.println();
}
[null, 반갑습니다., 여러분, 안녕하세요.]
4
false
Set에 저장된 객체에 접근하는 방법
1. 향상된 for문을 사용하는 방법
for(String str: set){
System.out.println(str);
}
람다식, 메소드 참조 활용
set.forEach(s -> System.out.println(s));
set.forEach(System.out::println);
2. HashSet에 저장되어 있는 객체들을 ArrayList에 담아서 사용하는 방법
List<String> list = new ArrayList<>(set);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
3. Iterator 반복자를 사용하는 방법
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
람다식, 메소드 참조 활용
set.iterator().forEachRemaining(s -> System.out.println(s));
set.iterator().forEachRemaining(System.out::println);
TreeSet
public void method1(){
Set<String> set = new TreeSet<>();
set.add("하하하");
set.add("나나나");
set.add("가가가");
set.add("다다다");
set.add("다다다");
set.add("하하하");
System.out.println(set);
System.out.println(set.size());
System.out.println(set.isEmpty());
System.out.println();
}
[가가가, 나나나, 다다다, 하하하]
4
false