Set

조상원·2025년 8월 2일

JAVA

목록 보기
24/34
  • Set은 저장 순서를 유지하지 않는 구조를 가지고 있다.
  • 중복되는 객체를 저장할 수 없고 null도 중복을 허용하지 않기 때문에 1개만 저장할 수 있다.
  • 인덱스로 관리하지 않기 때문에 인덱스를 매개 값으로 갖는 메소드가 없다.
  • 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.
리턴 타입메소드설명
booleanadd(E e)주어진 객체를 추가한다.
booleanaddAll(Collection<? extends E> c)주어진 Collection 타입 객체를 Set에 추가한다.
booleancontains(Object o)주어진 객체가 저장되어 있는지를 확인한다.
Iteratoriterator()저장된 객체를 한 번씩 가져오는 반복자 리턴한다.
booleanisEmpty()컬렉션이 비어 있는지 조사한다.
intsize()저장되어 있는 전체 객체수를 리턴한다.
voidclear()저장된 모든 객체를 삭제한다.
booleanremove(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에 저장된 객체에 접근하는 방법

  • 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

  • 중복 제거
  • 정렬
  • Null 저장 불가능
 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
  • 이진트리 구조

0개의 댓글