본문 바로가기

Language/Java

[JAVA]HashSet

1. HashSet이란?

Collection FrameWork의 종류 중 하나 (컬렉션 프레임 워크에는 List,Set,Map 이 있다.)

*컬렉션 프레임 워크란? 

많은 양의 데이터를 더 쉽고,편리하게, 더 효율적으로 관리할 수 있도록 자바에서 제공하는 클래스의 모임.

HashSet 내부 매소드 들은 List의 매소드와 거의 같다. (추가 == .add, 삭제 == .remove 등등)

 

(1)HashSet의 특징

Hashset은 중복을 허용하지 않는다. 만약 중복해서 적어도 자동으로 중복이 제거 된다. 

중복된 것은 표시되고, Run 하면 자동으로 중복 삭제

Hashset은 순서를 보장하지 않는다. 값을 넣은 순서와 상관없이 저장된다. 

*만약 값을 넣은 순서대로 저장되기 원한다면? LinkedHashSet을 이용하면 된다.

출력 결과, 넣은 순서대로 저장되어 있지 않음.

 

2. 코드 리뷰

package Chap_09;

import java.util.HashSet;
import java.util.LinkedHashSet;

public class _06_HashSet {
    public static void main(String[] args) {
        // 세트
        // 중복 허용 하지 않음 -> 중복해서 적어도 자동으로 중복 제거
        // set은 순서보장이 안됨. 순서가 지 멋대로 들어감.
        

		//선언
        HashSet<String> set = new HashSet<>();

        //데이터 추가
        set.add("삼겹살");
        set.add("쌈장");
        set.add("음료");
        set.add("소금");
        set.add("후추");
        set.add("삼겹살");
        set.add("깻입");
        set.add("상추");
        set.add("삼겹살");


        System.out.println("총 구매 상품 수 : " + set.size());

        //순회
        for (String s :
                set) {
            System.out.println(s);
        }

        System.out.println("------------------------------");


        //확인
        if(set.contains("삼겹살")){
            System.out.println("삼겹살 사러 출발");
        }

        System.out.println("------------------------------");

        //삭제
        System.out.println("총 구매 상품 수(삼겹살 구매 전): " + set.size());
        set.remove("삼겹살");
        System.out.println("총 구매 상품 수(삼겹살 구매 후): " + set.size());

        System.out.println("------------------------------");

        // 전체 삭제
        set.clear();
        if (set.isEmpty()){
            System.out.println("남은 구매 상품 수: " + set.size());
            System.out.println("집으로 출발");
        }

        System.out.println("------------------------------");

        // 세트: 중복  허용 x , 순서 보장도 x 
        // 링크드해쉬셋은 들어간 순서대로 저장됨.
        HashSet<Integer> intSet = new HashSet<>();
        // HashSet<Integer> intSet = new LinkedHashSet<>(); --> 값을 넣은 순서대로 저장 
        intSet.add(1);
        intSet.add(13);
        intSet.add(2);

        for (int i :
                intSet) {
            System.out.println(i);
        }


    }
}

3. 스스로 해보기 

package WorkOut_Myself;

import java.util.HashSet;
import java.util.LinkedHashSet;

public class HashSet_Myself {
    public static void main(String[] args) {
        // 선언
        HashSet<String> Memo = new HashSet<>();

        // 데이터 추가
        Memo.add("Get up Early");
        Memo.add("Study Java");
        Memo.add("Study Spring");
        Memo.add("Study Java");
        Memo.add("Study Spring");
        Memo.add("Study HTML");
        Memo.add("Study CSS");
        Memo.add("Study JavaScript");
        Memo.add("write 10 grateful things");

        System.out.println("-------------------------------------");

        // 총 상품 수 출력
        System.out.println("to do list (today): " + Memo.size());

        // 순회
        for (String s :
                Memo) {
            System.out.println(s);
        }

        System.out.println("-------------------------------------");

        // 품목이 있는지 확인
        if(Memo.contains("Study Java")){
            System.out.println("오늘 자바 공부를 해야합니다.");
        }

        System.out.println("-------------------------------------");

        // 삭제
        Memo.remove("Study CSS");

        if(Memo.contains("Study CSS")){
            System.out.println("오늘 CSS 공부를 해야합니다.");
        }
        else {
            System.out.println("오늘 CSS 공부 안 해도 됩니다.");
        }

        System.out.println("-------------------------------------");

        // 전체 삭제
        Memo.clear();
        System.out.println("남은 할 일 수는? " + Memo.size());

        // int HashSet 만들어서 값이 넣은 순서대로 저장되는지 보기

        HashSet<Integer> RandomDigit = new HashSet<>();

        RandomDigit.add(1);
        RandomDigit.add(14951);
        RandomDigit.add(233250);
        RandomDigit.add(40430643);
        RandomDigit.add(77777);
        RandomDigit.add(97971093);

        for (int i :
                RandomDigit) {
            System.out.println(i);
        }

        System.out.println("-------------------------------------");

        // 순서대로 값을 저장할려면?
        HashSet<Integer>StraightDigit = new LinkedHashSet<>();

        StraightDigit.add(1);
        StraightDigit.add(14951);
        StraightDigit.add(233250);
        StraightDigit.add(40430643);
        StraightDigit.add(77777);
        StraightDigit.add(97971093);

        for (int i :
                StraightDigit) {
            System.out.println(i);
        }
    }
}

'Language > Java' 카테고리의 다른 글

[JAVA] Iterator  (0) 2023.02.15
[JAVA] HashMap  (0) 2023.02.13
[JAVA] Linked List  (0) 2023.02.08
[JAVA] ArrayList  (0) 2023.02.07
[JAVA] Wrapper Class  (0) 2023.02.07