도담이 먹여 살려야하는 집사

HashSet 본문

카테고리 없음

HashSet

천재도담 2020. 10. 25. 17:10

HashSet은 자바의 collection 중의 SET의 대표적인 클래스임 

>> SET은 기본적으로 집합으로 중복된 원소를 허용하지 않음.

>> 여기서 파생된 HashSet은 중복된 원소를 허용하지않고 순서도 고려되지 않음 (별도의 정렬 작없이 없기 때문에 작업이 빠르다고함)

간단하게 LIST / SET / MAP을 비교하면 
LIST 순서가 있고 (인덱스 부여 후 인덱스로 검색 가능), 데이터의 중복도 허용됨.
SET은 순서가 없고(인덱스 사용X, 매개변수가 없음), 데이터의 중복은 허용하지 않음.
MAP은 KEY&VALUE값을 저장하고, KEY는 중복이 안되고 VALUE는 중복이 허용됨.

>> null값을 저장할 수 있음. 

>> 내부적으로 HashMap을 사용하여 데이터를 저장함. 

 

예를 들어 이벤트에서 전년도 당첨자는 당해년도 이벤트에 신청 할 수 없다는 조건을 걸기 위해서 HashMap을 쓸 수 있다. 주민등록번호를 value값으로 잡고 전년도 이벤트 신청자 중에서 1번의 검색으로 당첨자를 조회 할 수 있게됨. 만약 LIST를 사용할 경우 전년도 이벤트 신청자가 1000명일경우 1000번을 검색해야함 (컴퓨터는 List에 뭐가 있는지 모르기때문에 1번부터 뒤져서 찾아야함) 처리속도에서 확연한 차이를 느낄 수 있음. 

 

처리속도 : O(1) >> Set O(n) >> List

 

        Set<String> hashset01 = new HashSet<>();
        Set<String> hashset02 = new HashSet<>();

        hashset01.add("서모찌");
        hashset01.add("임도담");
        
        //중복된 요소의 저장
        System.out.println(hashset01.add("고양이"));
        System.out.println(hashset01.add("고양이"));

        //for문과 get()메소드를 이용한 요소의 출력
        for(String e : hashset01) {
            System.out.println(e + " ");
        }        
        
        System.out.println();

        hashset02.add("메가커피");
        hashset02.add("스타벅스");
        hashset02.add("소년커피");

        //iterator() 메소드를 이용한 요소의 출력
        Iterator<String> iter02 = hashset02.iterator();
        while (iter02.hasNext()) {
            System.out.println(iter02.next() + " ");
        }        
        
        System.out.println();
        System.out.println("집합의 크기 :" +hashset02.size());
    }

 

콘솔창 출력 결과 

true
false
고양이
임도담
서모찌

메가커피 
스타벅스
소년커피 
집합의 크기 :

 

Comments