오봉이와 함께하는 개발 블로그

컬렉션 프레임워크 - Set(HashSet) & Iterator 본문

알고리즘 & 자료구조 & 네트워크

컬렉션 프레임워크 - Set(HashSet) & Iterator

오봉봉이 2021. 11. 30. 17:31
728x90

Algorithmday_3 정리 (2021.11.30 화요일)

Set

  • Set컬렉션
  • Set인터페이스
    • 수학의 집합에 비유
    • 저장 순서가 유지되지 않음
    • 객체 중복 저장 불가
    • 구현 클래스 : HashSet, LinkedHashSet, TreeSet
    • 전체 객체를 대상으로 한 번씩 반복해 가져오는 반복자(Iterator) 제공
    • 인덱스로 객체를 검색해서 가져오는 메소드 없음
    • get() 메소드 없음

Iterator

  • java.util 패키지의 Iterator<E> 인터페이스
  • 컬렉션 프레임워크에서 컬렉션에 저장된 요소들을 읽어 오는 방법을 표준화한 것
  • 요소가 순서대로 저장된 컬렉션에서 요소를 순차적으로 검색할 때 사용
  • Vector<Integer> v = new Vector<Integer>();
  • Iterator<Integer> it = v.iterator();
  • 벡터 v의 요소를 순차적으로 검색할 iterator 객체 반환
  • it.hasNext()
  • it.next()
Set 예제
HashSetEx.java
public class HashSetEx {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        // 중복 값은 한 번만 저장
        set.add("Java");
        set.add("JDBC");
        set.add("Servlet/JSP");
        set.add("Java");
        set.add("MyBatis");

        System.out.println("총 객체 수 : " + set.size()); // 총 객체 수 : 4
        System.out.println();
        Iterator<String> iterator = set.iterator(); // 전체 객체를 대상으로 한 번씩 반복해 가져오는 반복자
        while (iterator.hasNext()) { // 들어있는 객체 수 만큼 반복
            System.out.println(iterator.next());
        }
//        Java
//        JDBC
//        MyBatis
//        Servlet/JSP

        System.out.println();
        set.remove("JDBC");
        set.remove("MyBatis");
        for(String element : set) {
            System.out.println(element);
        }
//        Java
//        Servlet/JSP

        System.out.println();
        set.clear();
        if(set.isEmpty()) {
            System.out.println("비어 있음");
        }
        // 비어 있음
    }
}
HashSetLotto.java
public class HashSetLotto {
    public static void main(String[] args) {
        // 중복 값 저장 하지 않는 특성 이용하여 로또 번호 생성
        Set<Integer> set = new HashSet<Integer>();
        int count = 0;
        for(; set.size() < 6;) {
            count++;
            int num = (int)(Math.random()*45) + 1;
            set.add(num);
            System.out.println(count);
        }
        System.out.println("Set");
        System.out.println(set);

        // LinkedList 생성되며 동시에 값 할당
         LinkedList<Integer> list = new LinkedList<Integer>(set);
        System.out.println("List");
        System.out.println(list);

        System.out.println("Reverse");
        Collections.reverse(list); // 반대 인덱스부터 출력
        System.out.println(list);

        System.out.println("Sorted List"); // 오룸차순 정렬
        Collections.sort(list);
        System.out.println(list);

        System.out.println("Sorted List Reverse");
        Collections.reverse(list); // 정렬 후 사용하면 내림차순 정렬 가능
        System.out.println(list);
    }
}
728x90
Comments