관리 메뉴

제뉴어리의 모든것

Chapter 11. Collection Framework - 4 (컬랙션 프레임웍의 구현체의 대하여 - Map) 본문

JAVA/자바의정석

Chapter 11. Collection Framework - 4 (컬랙션 프레임웍의 구현체의 대하여 - Map)

제뉴어리맨 2022. 7. 12. 01:17

Map 인터페이스 구현체

  • HashMap
    Map 인터페이스를 구현한 클래스이므로 데이터는 key, value를 한쌍의 데이터(Entry)로 저장한다는 특징이있다.
    그리고 해싱을 사용하기 때문에 많은양의 데이터를 검색할때 뛰어난 성능을 보인다.
    내부적으로는 key,value 의 한쌍인 데이터를 객체지향적으로 Entry란 내부클래스를 만들어서 관리한다.
    그리고 Map에 저장되는 데이터(Entry)는 Map 내부에 선언된 Entry 배열에 담겨 처리 된다.

    - 특징
    1. 데이터를 key, value 한 쌍의 형태로 관리
    2. key는 Map 컬랙션에서 유일해야한다.
    3. value는 중복이 가능하다. 즉 유일하지 않아도 된다.
    4. key값이 중복되어 들어 올 경우 기존 key와 쌍이던 value에 중복되어 들어온 key의 쌍인 value 값으로 덮어진다.
    5. key와 value 값으로 null을 허용한다. (같은 Map의 구현체인 Hashtable에서는 불가하다)

 

- HashMap의 대한 정리 -

 

HashMap

Map의 구현체중 하나

Key 중복 X,

Value 중복 O,

데이터 저장순서 유지 X

 

HashMap의 메서드

아래의 사이트 참조로 대체한다

https://gre-eny.tistory.com/97

 

[Java] HashMap 메소드 및 사용법

HashMap HashMap을 정의한다면, '키에 대한 해시 값을 사용하여 값을 저장하고 조회하며, 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 associate array'라고 할 수 있으며, 이 associate array(연관 배열)

gre-eny.tistory.com

 

  • 관련 코드 1 (아이디, 비밀번호 체크)
package ch11.ex;

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

public class HashMapEx1 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("myId", "1234");
        map.put("deleter", "1111");
        map.put("deleter", "2232"); //deleter 키의 value는 2232로 덮어쓰여진다

        Scanner scanner = new Scanner(System.in);

        while (true) {

            System.out.println("id와 pwd를 입력하여 주세요 : ");
            System.out.printf("id : ");
            String id = scanner.nextLine().trim();

            System.out.printf("pwd : ");
            String pwd = scanner.nextLine().trim();

//            Set<Map.Entry<String, String>> maps = map.entrySet();

            if (!map.containsKey(id)) {
                System.out.println("id가 존재하지 않습니다. 다시 입력하세요");
                continue;
            }

            if (!map.get(id).toString().equals(pwd)) {
                System.out.println("pwd가 일치하지 않습니다. 다시 입력하세요");
            }
            else
            {
                System.out.println("비밀번호가 일치합니다");

                Set<Map.Entry<String, String>> maps = map.entrySet();

                break;
            }
        }
    }
}

 

 

  • 관련 코드 2 (각 위인 점수 내기)
package ch11.ex;
import java.util.*;

public class HashMapEx2 {
    public static void main(String[] args) {

        HashMap map = new HashMap();
        map.put("강감찬", 1900);
        map.put("을지문덕", 1800);
        map.put("이순신", 2000);
        map.put("복지겸", 1000);
        map.put("여포", 10);

        Set set = map.entrySet();
        Iterator entryIter = set.iterator();

        while (entryIter.hasNext()) {
            Map.Entry entry = (Map.Entry)entryIter.next();

            System.out.printf("key : %s , value : %s",entry.getKey(), entry.getValue());
            System.out.println();
        }

        System.out.println("참가자 : "+ map.keySet());

        Collection collection = map.values();
        Iterator iterator = collection.iterator();

        int total = 0;
        while (iterator.hasNext()) {
            total += (int)iterator.next();
        }

        System.out.println("총점 : "+ total);
        System.out.println("평균 : "+ total/collection.size());
        System.out.println("최고점 : "+ Collections.max(collection));
        System.out.println("최저점 : "+ Collections.min(collection));

    }
}