ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 [JAVA] - HashSet개념 및 활용
    Java/자바의정석 2023. 2. 27. 23:29
    반응형

    자바의 HashSet에 대해알아보자

     

    HashSet의 기본 개념

    순서를 보장하지 않으며, 중복을 허용하지 않는다.
    HashSet - Set인터페이스를 구현한 대표적인 컬렉션
    순서를 유지하려 한다면 LinkedHashSet클래스를 사용해야한다.

     

    HashSet의 생성자

    HashSet() 기본생성자
    HashSet(Collection c)
    저장된컬렉션에 모든 객체 추가
    HashSet(int initialCapacity) 초기용량을 지정한다.
    HashSet(int initialCapacity.floatloadFactor) 보통 loadFactor용량이 80%정도 찼을 경우 용량을 늘려준다.

     

    boolean add(Object o) 추가
    boolean addAll(Object o) 합집합
    boolean remove(Object o) 삭제
    boolean removeAll(Collection o) 교집합
    boolean retainAll(Collection o) 조건부 삭제, 차집합
    void clear()  모두 삭제
    boolean contains(Object o) 포함여부
    boolean containsAll(Collection c) 모두를 포함하는지 여부
    boolean is Empty() 비어있는지 여부 확인
    int size() 지정된 객체 수를 확인

    이와같은 메서드들이있다 한번 살펴보고 지나가자.

     

     

    그럼 이제 코드를 보면서 확인해보자 아래의 코드는 자바의정석 예제코드이다.

    package JavaChap11;
    
    import java.util.*;
    
    class Ex11_9 {
        public static void main(String[] args) {
            //같은 객체들이 중복되어있음
            Object[] objArr = {"1",new Integer(1),"2","2","3","3","4","4","4"};
            Set set = new HashSet();
    
            for(int i=0; i < objArr.length; i++) {
                set.add(objArr[i]);   
            }
    
            System.out.println(set);
            System.out.println("size() ===> "+set.size());
    
            Iterator it = set.iterator();
    
            while(it.hasNext()) {
                System.out.println(it.next());
            }
        }
    }

    =============실행결과==============

    [1, 1, 2, 3, 4]

    size() ===> 5
    1
    1
    2
    3
    4


    Object[] objArr = {"1",new Integer(1),"2","2","3","3","4","4","4"};
    Set set = new HashSet();

    우선 이와같이 중복된 값을 여러개를 담은 배열을 생성한다.

     

    for(int i=0; i < objArr.length; i++) {
        set.add(objArr[i]);    // HashSet에 objArr의 요소들을 저장한다.
    }
    System.out.println(set);

    중복값이 많은 objArr배열객체를 생성해두었던 set객체레 for문을 통해 차례대로 add()메서드를 통해 집어넣는다.

    그리고 출력을 한다면  [1, 1, 2, 3, 4] 이와같이 중복된 값이 제거된 모습을 확인할 수 있다.

    여기서 1,1 두개의 값이 중복을 보이겠지만  하나는 String이고 나머지 하나는 Integer이다. 

    System.out.println("size() ===> "+set.size());

    size를 통하여 객체 수 확인이 가능하다.

     

    Iterator it = set.iterator();

    HashSet에 저장된 요소를 출력하기위해  Iterator를 사용하려고한다.

    Iterator는 list와 set의 조상 Collection이다.

    while(it.hasNext()) {
        System.out.println(it.next());
    }

    next()를 통해 모든 인자값을 불러오게한다.

    1
    1
    2
    3
    4

    그 결과 인자값 하나씩 불러오며 마무리가된다.

    또 하나의 코드를 한번 살펴보자.

     

    아래의 코드 또한 자바의정석 예제코드이다.

    class Ex11_10 {
        public static void main(String[] args) {
            Set set = new HashSet();
    
            for (int i = 0; set.size() < 6 ; i++) {
                int num = (int)(Math.random()*45) + 1;
                set.add(new Integer(num));
            }
    
            List list = new LinkedList(set); // LinkedList(Collection c)
            Collections.sort(list);          // Collections.sort(List list)
            System.out.println(list);
        }
    }

    ============실행결과==============

    정렬전===>[32, 1, 10, 11, 12, 29]
    정렬 후 ===>[1, 10, 11, 12, 29, 32]
    Set set = new HashSet();

    우선 HashSet객체를 생성한다.

     

     

    for (int i = 0; set.size() < 6 ; i++) {
        int num = (int)(Math.random()*45) + 1;
        set.add(new Integer(num));
        //set.add(num); 오토박싱으로 자동으로 변환해줌
    }

    size()메서들 활용하여 크기를 지정해준다.

    1~45사이의값을 랜덤으로 뽑아 set에 추가해준다.

     

    List list = new LinkedList(set); // LinkedList(Collection c)
    System.out.println("정렬전===>"+list);
    Collections.sort(list);          // Collections.sort(List list)
    System.out.println("정렬 후 ===>"+list);

    여기서 list의 객체를 생성하는것은 set의 경우는 순서를 보장하지 않기때문에 정렬이 불가능하다.

    set의 경우 정렬을 원한다면 이와같이 구현하면 된다.

    반응형

    댓글

Designed by Tistory.