본문 바로가기
수업(국비지원)/Java

[Java] chap13 : 컬렉션 프레임워크 - Collection(Map, TreeMap)

by byeolsub 2023. 4. 17.
  • Map 인터페이스

               : (key,value(객체)) 쌍으로 객체들을 저장하는 객체.

📌

package chap13;

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

public class MapEx1 {
	public static void main(String[] args) {
		String[] names = {"홍길동","김삿갓","이몽룡","임꺽정","김삿갓"};
		int [] nums = {1234,4567,2350,9870,3456};
		Map<String,Integer> map = new HashMap<>(); //Hash~ :순서는 모름
		for(int i=0;i<names.length;i++) {
			map.put(names[i], nums[i]);
		}
		System.out.println(map); //"김삿갓 = 4567"은 결과 도출되지 않음. 
                             // key는 그대로,value 값만 변경됨
		//value <= map.get(key)
		System.out.println("김삿갓의 전화번호:"+map.get("김삿갓")); //3456
		System.out.println("홍길동의 전화번호:"+map.get("홍길동")); //1234
		
//keySet() : key 값들을 Set으로 만들어 key값만 가지고 온다.
//map.keySet() : map 객체에서 key값들만 Set의 객체로 리턴
		System.out.println("keySet() 메서드로 전체요소 조회");
		Set<String> keys = map.keySet();
		for(String k : keys)
			System.out.println(k+":"+map.get(k));
//map.values() : map 객체에서 value값들만 조회. <- 순서도 중복도 가려주지 않음
		Collection<Integer> values = map.values();
		System.out.println("values() 메서드로 value값만 조회");

//개선된 for 구문으로 사용 가능
		for(Integer i : values) {
			System.out.println(i);
		}
		//map.entrySet() : map 객체에서(key,value)인 객체들을 전부 조회
		System.out.println("entrySet() 메서드로 모든 요소 조회");
		Set<Map.Entry<String,Integer>> entry = map.entrySet();
		for(Map.Entry<String,Integer> e : entry) {
			System.out.println(e.getKey()+":"+e.getValue());
		}
	}
}

  • TreeMap 예제

                : Key 객체로 정렬됨.

📌

package chap13;

import java.util.TreeMap;

public class MapEx2 {
	public static void main(String[] args) {
		TreeMap<Integer,String> scores = new TreeMap<>();
		scores.put(87,"홍길동"); scores.put(98,"이몽룡");
		scores.put(75,"임꺽정"); scores.put(94,"김삿갓");
		scores.put(80,"성춘향"); scores.put(88,"향단이");
		System.out.println(scores);
		//순서를 가지고 있어서 일반 Map에서는 사용 불가
		//Map<Integer,String> scores = new TreeMap<>(); - 오류.
		System.out.println("첫번째 key :"+scores.firstKey()); //75
		//Map.Entey : (key,value) 쌍인 객체의 자료형
		System.out.println("첫번째 entry :"+scores.firstEntry()); //75=임꺽정
		System.out.println("첫번째 entry key :"+scores.firstEntry().getKey()); //75
		System.out.println("첫번째 entry value :"+scores.firstEntry().getValue()); //임꺽정
		System.out.println("마지막 entry :"+scores.lastEntry()); //98=이몽룡
		System.out.println("94점 아래 점수 :"+scores.lowerEntry(94)); //88=향단이
		System.out.println("95점 위 점수 :"+scores.higherEntry(95)); //98=이몽룡
		//floor : 근사정수
		System.out.println("95점 아래 점수 95점 포함 :"+scores.floorEntry(95)); //94=김삿갓
		//ceiling : 나보다 큰 근사정수
		System.out.println("95점 위 점수 95점 포함 :"+scores.ceilingEntry(95)); //98=이몽룡
	}
}

📌 Collection(Map) Exam4.

package chap13;
/*
 * 1. 대한민국=서울,캐나다=오타와,영국=런던을 HashMap에 저장하고,
 *    화면에서 나라이름을 입력받아 해당 나라의 수도를 출력하는 프로그램 구현하기
 * 2. 나라이름 입력시 종료문자가 입력될 때 까지 계속 입력받기
 * 3. 등록된 나라가 아니면 등록된 나라 아님으로 출력하기   
 * 4. 등록된 나라가 아닌경우 수도를 입력받아 등록.
 * 5. 종료시 등록된 나라와 수도를 출력하기.
 */

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

public class Exam4 {
	public static void main(String[] args) {
		Map<String,String> map = new HashMap<>();
		map.put("대한민국", "서울");
		map.put("캐나다", "오타와");
		map.put("영국", "런던");
		System.out.println("나라이름을 입력하세요.(종료시:종료)");
		Scanner scan = new Scanner(System.in);
		while(true) {
				String n = scan.next();
				if(n.equals("종료")) break;
				if(map.get(n) == null) { //값이 없으면 value 값으로 null을 출력해준다. 그래서 map.get(n) == null로 씀
					System.out.println("등록된 나라가 아닙니다.");
					System.out.println("수도를 입력하세요.");
					String s = scan.next();
					map.put(n,s);
				} else
					System.out.println(n+"의 수도: "+map.get(n));
		}
		System.out.println("등록된 나라와 수도");
		//map.entrySet() : map 객체에서(key,value)인 객체들을 전부 조회
		for(Map.Entry<String,String> e : map.entrySet())
			System.out.println(e.getKey()+":"+e.getValue());
	     //map.keySet() 이용한 객체 전부조회
//		    for(String k : map.keySet()) System.out.println(k+"="+map.get(k));
	}
}