java 기초 공부 내용 정리(컬렉션 프레임웍-Map, HashMap)

홍준성·2022년 6월 3일
0

java 기초 공부

목록 보기
32/39

Map

키를 통해서 값을 참조할 수 있는 구조

특징

  1. 인터페이스이기 때문에 사용하려면 업 캐스팅이 필요
  2. Map을 구현한 대표 클래스: HashMap, TreeMap

키를 통해서 값을 참조할 수 있는 구조

메서드설명
boolean containsKey(Object key)해당 키가 있는지 여부 반환
boolean containsValue(Object value)해당 값이 있는지 여부 반환
V get(Object key)해당 key와 쌓인 값을 반환
boolean isEmpty()맵 객체에 요소가 없으면 true 반환
Set< Key > keySet()키들을 Set 형태로 변환
V put(K key, V value)키와 값을 요소로 추가
V remove(Object key)이 키를 가진 요소를 제거
int size()전체 요소의 개수를 반환

HashMap

Key와 Value 값으로 데이터를 저장하는 형태

특징

  1. Map 인터페이스의 한 종류
  2. Map의 모든 속성을 갖고 있으며 저장 방식 동일
  3. 해싱(Hashing)이라는 검색 알고리즘 사용
  4. key의 중복은 허용하지 않으나 value의 중복은 허용

해싱이란?

  1. 알고리즘: 문제를 해결하기 위한 절차적 해결 과정
  2. 검색 알고리즘: 자료구조 내의 데이터 중 원하는 데이터를 찾는 과정
  3. 배열에 저장된 데이터를 가장 빨리 찾는 방법?
    → 저장된 데이터가 몇 번째 위치하는지를 알아오는 것

따라서 해싱이란 메모리낭비를 최소화하기 위해 저장할 값을 입력 받을 때 연산을 통해 새로운 주소 값을 생성하여 메모리에 저장(매핑, mapping)하는 기법

해싱의 구조

  1. 키 값을 해시값으로 변경해주는 해시 함수
  2. 변경된 해시 값으로 저장할 공간인 해시 테이블

	public static void main(String[] args) {
		HashMap<String, String> hm = new HashMap<String,String>();
		Scanner sc = new Scanner(System.in);
		
		//1. put(key, value)
		hm.put("apple", "사과");
		hm.put("paper", "종이");
		hm.put("flower", "꽃");
		
		String voca;
		System.out.println("알고싶은 단어를 입력하세요: ");
		voca=sc.nextLine();
		
		//2. containsKey(key): key가 hashmap에 존재하면 true
		if(hm.containsKey(voca)) {
			//3. get(key) : value값 반환
			System.out.println("해당하는 뜻은: " +hm.get(voca));
		}
		else {
			System.out.println("해당 단어에 대한 뜻은 데이터베이스에 없습니다.");
		}
	}
}

활용 예시(고객관리 프로그램)

HashMap을 활용한 사용자 이름과 전화번호를 저장하는 전화번호부 만들기

1. 생성: HashMap 변수명 = new HashMap();
2. 삽입: 변수명.put(key, value)
3. 가져오기: 변수명.get(key)
4. key 존재 확인: 변수명.containsKey(key)

<전화번호부 기능>
1. 고객 저장
2. 고객 검색
3. 전체 보기
4. 끝내기

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

public class Day02Ex {
	static HashMap<String, String> hm = new HashMap<String, String>();
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		
		int choice;
		
		while(true) {
			System.out.println("☆★☆★☆★전화번호부☆★☆★☆★");
			System.out.println("1. 고객정보 저장");
			System.out.println("2. 고객정보 검색");
			System.out.println("3. 고객정보 출력");
			System.out.println("4. 끝내기");
			System.out.print("번호 입력: ");
			choice = sc.nextInt();
			if(choice==1) {
				System.out.println("-------------고객정보 저장-------------");
				insert();
			}
			else if(choice==2) {
				System.out.println("-------------고객정보 검색-------------");
				search();
			}
			else if(choice==3) {
				System.out.println("-------------고객정보 출력-------------");
				show();
			}
			else if(choice==4) {
				System.out.println("프로그램을 종료합니다.");
				break;
			}
			else {
				System.out.println("잘못입력하셨습니다.");
			}
		}
		
	}
	
	// 고객정보 저장
	public static void insert() {
		String name, phone;
		System.out.println("저장할 고객의 이름: ");
		name=sc.next();
		
		//name이 key이므로, 중복허용 불가
		if(hm.containsKey(name)) {
			System.out.println("이미 존재하는 이름입니다.");
			return;
		}
		else {
			System.out.println("저장할 고객의 번호: ");
			phone=sc.next();
			hm.put(name, phone);
			System.out.println("저장 완료!");
		}
	}
	
	// 고객정보 검색
	public static void search() {
		String searchName;
		System.out.println("검색할 이름: ");
		searchName=sc.next();
		
		//searchName이 hm에 존재해야 검색 가능
		if(hm.containsKey(searchName)) {
			System.out.println("검색완료!");
			System.out.println("검색된 전화번호: "+hm.get(searchName));
		}
		else {
			System.out.println("검색된 이름이 없습니다.");
		}
	}

	// 고객정보 출력
	public static void show() {
		Set<String> keyset=hm.keySet();
		Iterator i = keyset.iterator();
		while(i.hasNext()) {
			String curName=(String)i.next();
			System.out.println("name: "+curName+", phone: " +hm.get(curName));
		}
	}

}

profile
준성이의 개발자 공부 velog

0개의 댓글