본문 바로가기
기초 및 언어/▶ Java&JSP

34. HashMap

by 류딩이 2025. 8. 26.

HashMap 정리 

1) HashMap 기본 개념

  • 키(key)–값(value) 쌍으로 데이터 저장
  • 키는 중복 불가, 값은 중복 허용
  • 순서 보장 안 됨 (삽입 순서 유지 필요시 → LinkedHashMap 사용)
  • 탐색/삽입 평균 O(1) (해시 기반)

2) 주요 메서드 표

메서드 설명
put(K key, V value) 값 추가/수정 (키 중복 시 기존 값 덮어씀)
get(Object key) 키에 해당하는 값 반환 (없으면 null)
containsKey(Object key) 특정 키 존재 여부
containsValue(Object value) 특정 값 존재 여부
remove(Object key) 키 삭제, 삭제된 값 반환 (없으면 null)
replace(K key, V value) 키의 값을 새 값으로 교체
clear() 모든 데이터 삭제
size() 데이터 개수 반환
keySet() 키만 모아 Set으로 반환
values() 값만 모아 Collection으로 반환
entrySet() 키–값 쌍을 Map.Entry Set으로 반환

3) Ex11_HashMap — 기본 사용 & 입력 검증

Map<String, Integer> hm = new HashMap<>();
System.out.println(hm.size()); // 0

hm.put("펭구", 10);
hm.put("모코코", 20);
hm.put("배불뚝이", 30);
hm.put("배불뚝이", 50); // 동일 키 → 값 덮어쓰기
System.out.println(hm.size()); // 3
System.out.println(hm);        // {펭구=10, 모코코=20, 배불뚝이=50}

Integer v = hm.get("배불뚝이"); // 50
System.out.println(v);

System.out.println(hm.containsKey("배불뚝이")); // true
System.out.println(hm.containsValue(50));      // true
System.out.println(hm.containsValue(111));     // false

// 사용자 입력으로 검색
Scanner sc = new Scanner(System.in);
System.out.print("이름 입력 :");
String name = sc.next();

if (hm.containsKey(name)) {
    System.out.println(hm.get(name));
} else {
    System.out.println("찾는 이름이 없습니다.");
}

포인트

  • put은 같은 키가 오면 값 덮어쓰기
  • get은 키 없을 때 null 반환 → 조건문 주의
  • containsKey/containsValue 활용 가능

4) Ex12_HashMap — 간단 영어 사전

Map<String, String> dic = new HashMap<>();
dic.put("pencil", "연필");
dic.put("banana", "바나나");
dic.put("desk", "책상");
dic.put("sky", "하늘");
System.out.println(dic);

Scanner sc = new Scanner(System.in);
do {
    System.out.print("찾는 단어는? 나가기q: ");
    String input = sc.next();

    if (input.equals("q")) {
        System.out.println("프로그램 종료!");
        break;
    }

    if (dic.containsKey(input)) {
        System.out.println(dic.get(input));
    } else {
        System.out.println("없습니다.");
    }
} while (true);

 

포인트

  • 사전 프로그램: 키 = 영어, 값 = 한국어
  • 존재 여부는 containsKey → 있으면 get으로 값 출력

5) Ex13_HashMap — 사용자 정의 객체(Movie) 저장

class Movie {
    private String title;
    private int age;

    public Movie(String title, int age) {
        this.title = title;
        this.age = age;
    }
    public String toString() {
        return title + "/" + age;
    }
}

public class Ex13_HashMap {
    public static void main(String[] args) {
        Movie m1 = new Movie("좀비딸", 12);
        Movie m2 = new Movie("F1", 12);
        Movie m3 = new Movie("귀멸의 칼날", 12);

        Map<String, Movie> movie = new HashMap<>();
        movie.put("롯데시네마", m1);
        movie.put("CGV", m2);
        movie.put("메가박스", m3);

        // keySet으로 순회
        Set<String> keys = movie.keySet();
        for (String s : keys) {
            System.out.println(s + ":" + movie.get(s));
        }

        // replace로 값 교체
        Movie m4 = new Movie("국제시장", 15);
        movie.replace("메가박스", m4);

        // remove — 삭제된 값 반환
        Movie rm = movie.remove("CGV");
        System.out.println(rm);
        System.out.println(movie);

        movie.clear();
        System.out.println(movie); // {}
    }
}

포인트

  • Map<String, Movie>로 사용자 정의 객체 저장 가능
  • keySet()으로 키만 추출 후, map.get(key)로 값 접근
  • replace(key, value)는 교체, remove(key)는 삭제된 값 반환
  • clear()로 전체 삭제 가능

 

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

class Company{
	private String part;
	private String position;
	private int grade;



	public Company(String part, String position, int grade) {
		super();
		this.part = part;
		this.position = position;
		this.grade = grade;
	}



	public String toString() {
		return part + "/" + position + "/" + grade;
	}


}//Company


public class Ex14_이정륜 {

	public static void main(String[] args) {


		Map<String, Company> c = new HashMap<String, Company>();
		String name, part, position, exit;
		int grade;
		Scanner sc = new Scanner(System.in);

		// 정보입력
		while(true) {	
			try {
				System.out.print("이름 : ");
				name = sc.next();

				System.out.print("부서 : ");
				part = sc.next();

				System.out.print("직급 : ");
				position = sc.next();

				System.out.print("평점 : ");
				grade = sc.nextInt();

				Company com = new Company(part, position, grade);
				c.put(name, com);
			}catch(Exception e) {
				System.out.println("잘못 입력했습니다. 다시 입력하세요");
			}


			System.out.println("계속? y/n");
			exit = sc.next();

			if(exit.equals("n")) {
				System.out.println(c);
				break;
			}else {
				 
			}
		}
		
		//정보찾기
		while(true) {
			boolean findname = false;
			System.out.println("찾는 이름 : ");
			name = sc.next();
			
			// 방법1)
			Set<String>key = c.keySet();
			for(String x : key) {
				if(x.equals(name)) {
					System.out.println(c.get(name));
					findname = true;
				}
			}
            if(findname == false) {
				System.out.println("찾는 이름 없음");
			}	
			// 방법2)
			// 여기서 c.get(name) 자체가 Company 객체를 반환
			// Company 클래스에서 toString()을 오버라이딩 해놨으니까,
			// 그냥 System.out.println(c.get(name)) 만으로 part/position/grade 문자열이 출력
			if(c.containsKey(name)) {
				System.out.println(c.get(name));
				findname = true;
			}
			if(findname == false) {
				System.out.println("찾는 이름 없음");


			}
			
			// 방법3
			if(c.get(name) == null) {
				System.out.println("찾는이름 없음");
			}else {
				System.out.println(c.get(name));
			}
			
			System.out.println("계속? y/n");
			exit = sc.next();
			if(exit.equals("n")) {
				break;
			}
		}

		// 정보삭제
		while(true) {
			System.out.println("삭제 할 이름 : ");
			name = sc.next();

			if(c.containsKey(name)) {
				c.remove(name);
				System.out.println("삭제되었습니다.");
			}else {
				System.out.println("찾지 못했습니다.");
			}


			System.out.println("계속? y/n");
			exit = sc.next();
			if(exit.equals("n")) { 
				System.out.println("프로그램 종료");
				break;
			}
		}
	}
}

/*
이름 : kim
부서 : 연구부
직급 : 대리
평점 : 7
계속?y

이름 : park
부서 : 인사부
직급 : 과장
평점 : 6
계속?n
{kim=연구부/대리/7, park=인사부/과장/6}

찾는 이름:hong
찾는 이름 없음
계속?y

찾는 이름:park
인사부/과장/6
계속?n
삭제할  이름:jung
찾는 이름 없음

계속?y
삭제할  이름:park
{kim=연구부/대리/7}

계속?n
프로그램을 종료합니다.
 */

6) 마무리 요약

  • HashMap = 키-값 구조, 키 중복 불가 / 값 중복 허용
  • 주요 메서드: put, get, containsKey, containsValue, remove, replace, keySet
  • 활용 예시:
    • 간단 데이터 저장 (Ex11)
    • 영어 사전 프로그램 (Ex12)
    • 객체 저장 및 관리 (Ex13)

 

'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글

36. Buffer  (0) 2025.08.29
35. 바이트스트림  (0) 2025.08.26
33. HashSet  (0) 2025.08.26
32. Vector와 Enumeration  (1) 2025.08.26
31. ArrayList  (5) 2025.08.24