본문 바로가기
프로그래밍 언어/Java 프로그래밍

컬렉션 프레임워크(6) Map 인터페이스

by Hyeon_ 2021. 11. 30.

컬렉션 프레임워크(Collection Framework)

Map 컬렉션

  • Map 인터페이스

  • 키(Key)와 값(Value)의 쌍으로 이루어진 데이터의 집합

  • 키와 값은 모두 객체

  • 키는 중복될 수 없지만 값은 중복 저장 가능

  • 기존에 저장된 데이터와 중복된 키 값을 저장하면, 기존의 값은 없어지고 마지막에 저장된 값이 남음(덮어씀)

  • 구현 클래스: HashMap, Hashtable, LinkedHashMap, Porperties, TreeMap

  • 일반적으로 키 타입은 String을 주로 사용

  • HashMap을 생성하기 위해서는 key 타입과 value 타입 매개변수로 주고 기본 생성자 호출

  • 기본 형식

Map<K, V> map = new HashMap<K, V>();

HashMap 예제

HashMapEx.java
package map;

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

public class HashMapEx {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();

        // 객체 저장
        map.put("김준면", 85);
        map.put("김민석", 90);
        map.put("도경수", 95);
        map.put("김준면", 100); // 동일 키 존재. 새로운 값으로 덮어씀

        System.out.println("총 Entry 수: "+map.size());
        System.out.println(map);

        // key로 검색: value 반환
        System.out.println("김준면 검색: "+map.get("김준면"));
        // 키 값 출력
        System.out.println("100(value) 검색: "+map.keySet());

        // key와 value 출력
        for(String key : map.keySet()) System.out.println(key + " : "+ map.get(key));

        // 객체 삭제 :remove(key)
        map.remove("김민석");
        System.out.println("총 Entry 수: "+map.size());

        map.clear();
        System.out.println("총 Entry 수: "+map.size());
    }
}

HashMap 예제 -2

  • HashMap에 배열 넣기
HashMapEx2.java
package map;

import java.util.HashMap;
import java.util.Set;

public class HashMapEx2 {
    public static void main(String[] args) {
        HashMap<String, String[]> phone = new HashMap<>();

        phone.put("친구1", new String[] {"010-1234-5678", "02-111-1111", "fri@gmail.com"});
        phone.put("친구2", new String[] {"010-2345-6789", "02-222-2222", "fri2@gmail.com"});
        phone.put("부장", new String[] {"010-3456-7890", "02-333-3333", "boss1@gmail.com"});
        phone.put("과장", new String[] {"010-4567-8901", "02-444-4444", "boss2@gmail.com"});
        phone.put("대리", new String[] {"010-5678-9012", "02-555-5555", "boss3@gmail.com"});

        System.out.println("총 그룹 수: "+phone.size());

        // 내 연락처 모든 정보 조회
        for(String key : phone.keySet()) {
            System.out.print("key 값 출력: ");
            String [] phoneList = phone.get(key);
            for(String one : phoneList) {
                System.out.print(one + " | ");
            }
            System.out.println();
        }

        System.out.print("\n부장 검색: ");
        if(phone.containsKey("부장"))
            for(String one : phone.get("부장"))
                System.out.print(one + " | ");
    }
}

HashMap 연습문제 -1

  • (영어, 한글) 단어를 상으로 HashMap에 저장하고
  • 영어로 한글을 검색하는 프로그램 작성
  • exit 입력하면 종료
HashMapEx3.java
package map;

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

public class HashMapEx3 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        Scanner scan = new Scanner(System.in);

        // 객체 저장
        map.put("apple", "사과");
        map.put("summer", "여름");
        map.put("school", "학교");
        map.put("candy", "사탕");
        map.put("water", "물");

        while(true) {
            System.out.print("찾고 싶은 단어는?");
            String search = scan.next();

            if(search.equals("exit")) {
                System.out.println("종료합니다");
                break;
            }else {
                if(map.keySet().contains(search)) {
                    System.out.println(map.get(search));
                }else {
                    System.out.println("없는 단어 입니다");
                }
            }
        }
        scan.close();
    }
}

Collections 클래스

  • java.util. 패키지에 포함된 클래스
  • 컬렉션을 다루는 유용한 메소드 지원
  • sort(): 정렬
  • reverse(): 반대로 정렬
  • max() / min() : 최대값 / 최소값
  • binarySearch(): 검색
CollectionsEx.java
package map;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class CollectionsEx {
    public static void main(String[] args) {
        List<String> myList = new ArrayList<>();

        myList.add("트랜스포머");
        myList.add("스타워즈");
        myList.add("매트릭스");
        myList.add("터미네이터");
        myList.add("아바타");

        System.out.print("리스트 순서 : ");
        for(String movie : myList) {
            System.out.print(movie + " | ");
        }

        System.out.println("오름차순 정렬: ");
        Collections.sort(myList);
        System.out.println(myList);

        // 검색
        int index = Collections.binarySearch(myList, "스타워즈");
        System.out.println("스타워즈는(은) " + (index+1) + "번째 입니다.");

        System.out.println("내림차순 정렬: ");
        Collections.reverse(myList);
        printList(myList);
    }

    static void printList(List list) {
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String element = it.next();
            String sep;
            if(it.hasNext())
                sep = "->";
            else
                sep = "\n";

            System.out.print(element + sep);
        }
    }
}