본문 바로가기

Languages/JAVA

[JAVA] HashSet의 개념, 사용법, 예제

HashSet를 알아봅시다! 😉


오늘은 HashSet에 대해서 알아봅시다.


개념

HashSet은 Set 인터페이스를 구현한 클래스입니다. 그렇기 때문에 Set의 성질을 그대로 상속받습니다.

HashSet의 특징을 봅시다!

  1. 순서가 없다.
  2. HashMap과 달리 key값이 존재하지 않는다.
  3. 중복을 허용하지 않는다.
  4. 어떤 데이터를 중복 없는 묶음 (집합) 으로 관리하고자 할 때 사용된다.

가장 중요한 성질은 중복을 자동으로 걸러준다는 것 입니다.


사용법

import java.util.HashSet;

 

HashSet을 사용하기 위해서는 위 문장을 import 해야합니다.


데이터 추가 - add(e)

set1.add("이00");
set1.add("박00");
set1.add("김00");
set1.add("김00"); //중복불가

add를 사용해서 데이터를 추가해줍니다. 이때 중복된 데이터는 추가되지 않습니다.


데이터 포함 여부 확인 - contains

boolean result = set1.contains("이00");

데이터 포함 여부를 확인하기 위해서는 contains을 사용합니다. 포함되어 있으면 true, 아니면 false를 반환합니다.


데이터 삭제 - remove

boolean isDelete = set1.remove("이00");

데이터를 삭제하기 위해서 remove를 사용합니다. 삭제를 시도하고 성공여부를 리턴합니다.


크기 - size()

int size = set1.size();

size을 사용하면 집합 크기를 반환합니다.


 

집합 아이템 출력 - Iterator 사용

//반복자 객체를 얻어낸다.
Iterator<String> it = set1.iterator();
//반복문 돌면서
while(it.hasNext()) {
	//아이템을 하나씩 불러내서 출력하기
	String item = it.next();
	System.out.println(item);
}

Iterator를 사용하여 순서가 있게 만들어줍니다.

그 다음에 while문을 사용하여 아이템을 하나씩 불러내서 출력해줍니다.

 


예제

예제 1 - 로또번호 1~45 중의 숫자중 랜덤하게 6개를 중복 없이 얻어내서 콘솔창에 출력하는 프로그래밍을 해보세요. 

package test.main;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

public class MainClass10 {
   public static void main(String[] args) {
      /*
       *  로또번호 1~45 중의 숫자중 랜덤하게 6개를 중복 없이 얻어내서 콘솔창에 출력하는 프로그래밍을 해
       *  보세요. 
       */
      
      //랜덤한 숫자를 얻어낼 객체
      Random ran=new Random();
      //랜덤한 숫자를 저장할 객체
      Set<Integer> lottoSet=new HashSet<>();
      
      while(true) {
         //1 ~ 45 사이의 랜덤한 숫자 얻어내기 
         int ranNum=ran.nextInt(45)+1;
         //얻어낸 숫자를 Set 에 저장하기 
         lottoSet.add(ranNum);
         //만일 lottoSet 의 size 가 6 이면 반복문 탈출 
         if(lottoSet.size() == 6) {
            break;
         }
      }
      
      Iterator<Integer> it=lottoSet.iterator();
      while(it.hasNext()) {
         int num=it.next();
         System.out.print(num+",");
      }
   
   }
}