Fairy ' s

[JAVA] HashMap / HashSet? 본문

Study/JAVA

[JAVA] HashMap / HashSet?

berafairy 2023. 1. 10. 09:36

 

// 참고

 

 


 

 

HashMap

  • key : value 형태로 데이터를 저장하기 위해 사용된다. // new HashMap<key, value>();
  • key 값은 중복이 불가능하지만, value 값은 중복 가능하다.
  • key의 타입을 String을 가장 많이 사용한다.
  • value의 타입을 여러타입을 사용할 때에는 value 부분에 Object를 사용한다.
// value에 직접 타입을 지정할 때
Map<String, String> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();

// value에 타입을 지정하지 않고 Object로 지정할 때
Map<String, Object> map3 = new HashMap<>();
String name = (String) map3.get("name");
int num = (int)map3.get("num");
  • value에 직접 타입을 지정할 경우에는 new HashMap을 하나하나 선언해 주어야 한다.
  • value에 Object를 type으로 할 경우 .get 메서드를 사용할 때 위 코드와 같이 casting 해주어야 한다.

 

  • 특정 key로 저장된 값 삭제 // map.remove("name")
  • 비어있는지 여부 확인 // boolean isEmpty = map.isEmpty();
  • 모두 삭제 // map.clear();

 

 


예제 1 / 사전 dictionary

package test;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class maptest {
	public static void main(String[] args) {
		//key's Generic => String, value's Generic => String
		Map<String,String> dic = new HashMap<>();
		dic.put("cat","고양이");
		dic.put("dog","강아지");
		dic.put("house","집");
		dic.put("run","달리다");
		dic.put("phone","전화기");
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("찾을 단어를 입력하세요 : ");
		String str = scanner.nextLine();
		if(dic.containsKey(str)) {
			System.out.println("뜻 : "+ dic.get(str));
		}else {
			System.out.println("존재하지 않는 단어입니다.");
		}
	}
}
  • ContainsKey(str) : str에 입력한 값이 포함되어 있는지 확인하는 메서드

 


예제 2

package test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class maptest {
	public static void main(String[] args) {
		//key's Generic => String, value's Generic => String
		Map<String,String> dic = new HashMap<>();
		dic.put("cat","고양이");
		dic.put("dog","강아지");
		dic.put("house","집");
		dic.put("run","달리다");
		dic.put("phone","전화기");
		
		//key 값의 집합을 Set로 얻어내기
		Set<String> keys = dic.keySet();
		//Set 안에 저장된 아이템을 일렬로 세운 반복자 객체 얻어내기
		Iterator<String> it = keys.iterator();
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("찾을 value 값을 입력하세요 : ");
		String line = scanner.nextLine();
		
		//결과 key 값을 담을 변수
		String resultKey = null;
		
		//저장된 아이템이 있는 동안에 반복문 돌면서 아이템을 빼낸다.
		while(it.hasNext()) {
			String key = it.next();
			//키값을 이용해서 value 값을 읽어온다.
			String value = dic.get(key);
			//만약 value가 입력한 문자열과 같으면
			if(value.equals(line)) {
				resultKey = key;
			}
			
		}
		if(resultKey!=null) {
			System.out.println("key 값 : " + resultKey);
		}else {
			System.out.println("해당 value는 저장되지 않았습니다.");
		}
	}
}
  • Iterator<String> 는 반복자 라고 하며 순서대로 정렬하기 위해 사용
  • hasNext()는 boolean 타입으로 반환, 다음에 가져올 값이 있는지 확인
  • key 값의 집합을 set으로 만들고, set에 저장된 아이템들을 순서대로 정렬한 객체를 얻어낸다.
    다음으로 찾을 value 값을 입력받고 반복문을 돌면서 입력받은 값과 같은 value 값이 있을 때까지 찾는다.

 


HashSet

  • Set 인터페이스를 구현한 클래스. Set 성질을 그대로 상속받는다.
  • HashSet 은 순서가 없고 key값이 존재하지 않으며 중복을 허용하지 않는다.
  • 어떤 데이터를 중복 없는 묶음(집합) 으로 관리하고자 할 때 사용된다.
  • 중복을 자동으로 걸러준다.
set1.add("이00");
set1.add("박00");
set1.add("김00");
set1.add("김00"); // 중복불가 자동적으로 추가되지 않음

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

// 데이터 삭제
boolean isDelete = set1.remove("이00");

// 데이터 크기
int size = set1.size();
  • 데이터 포함 여부를 확인하기 위해서는 contains를 사용한다.
  • 포함 되어 있으면 true, 아니면 false를 반환한다.

 

//반복자 객체를 얻어낸다.
Iterator<String> it = set1.iterator();
//반복문 돌면서
while(it.hasNext()) {
	//아이템을 하나씩 불러내서 출력하기
	String item = it.next();
	System.out.println(item);
}
  • Iterator를 사용하여 순서가 있게 만들어준다.
  • while문을 통해 아이템을 하나씩 호출하여 출력한다.

 


예제 3

1 ~ 45 의 숫자 중에 랜덤하게 6개를 중복 없이 얻어내서 출력

// import 생략

public class maptest {
	   public static void main(String[] args) {
	      Random ran=new Random();
	      Set<Integer> lottoSet=new HashSet<>();
	      
	      while(true) {
          	// 1 ~ 45 사이 랜덤 숫자 얻기 
	         int ranNum=ran.nextInt(45)+1;
             	// 얻어낸 숫자를 Set에 저장
	         lottoSet.add(ranNum);
             	// lottoSet 크기가 6이면 반복문 탈출
	         if(lottoSet.size() == 6) {
	            break;
	         }
	      }
	      
	      Iterator<Integer> it=lottoSet.iterator();
	      while(it.hasNext()) {
	         int num=it.next();
	         System.out.print(num+",");
	      }
	   
	   }
	}
  • Random : 랜덤한 숫자를 얻어내는 객체
  • Set<Integer> : 랜덤한 숫자를 저장할 객체

'Study > JAVA' 카테고리의 다른 글

[JAVA] Exception / try ~ catch  (0) 2023.01.11
[JAVA] Wrapper Class ?  (0) 2023.01.11
[JAVA] Generics Class ?  (0) 2023.01.10
[JAVA] ArrayList ?  (0) 2023.01.10
[JFrame] JFrame 이란? / 기초 예제 구현  (0) 2023.01.09
Comments