초급과정/java

[Java] MapExample

whalerice 2023. 10. 25. 08:36

1

import java.util.HashMap;
import java.util.Iterator;

/**
 *	HashMap
 *	key 와 value 로 이루어짐
 *	key 값은 중복을 허용하지 않고 순서가 보장되지 않음.
 *
 *	Map 타입의 컬렉션
 *
 *	주요 메소드
 *	.put(key, value); : 데이터 입력 key 값은 중복되지 않음. value는 중복 될 수 있음.
 *	.get(key)		  : 입력 받은 value 값을 key 값을 통해 꺼내 올 수 있음.
 *	.keySet()		  : key 로 이루어진 hashSet 값을 가져옴.
 *
 *
 */
public class MapExample {
	public static void main(String[] args) {
		/*
		 * 제네릭 정보
		 * HashMap<key, value>
		 * 
		 */
		// 타입을<> 명확히 지정해주면 캐스팅 해줄 필요x, Object로 선언할수도 있으나 꺼낼때마다 찾아봐야함
		HashMap<String, Integer> map = new HashMap();
		
		map.put("홍길동", 95);
		map.put("이순신", 75);
		map.put("정몽주", 90);
		map.put("이성계", 83);
		
//		System.out.println(map);
		
		// 홍길동의 점수 (각 타입을 캐스팅해줘야함)
//		int score = (int)map.get("홍길동");
		// 이순신의 점수 넣은 타입 그대로 꺼낼 것.
//		double d_score = (double)map.get("이순신");
//		System.out.println(score);
//		System.out.println(d_score);

		//기존에 입력된 데이터를 다시 입력하면 덮어씌워짐.
		map.put("홍길동", 60);
		System.out.println(map);
		
		
		//데이터를 순차적으로 꺼내오는 역할 Iterator (여러개의 데이터를 한번에 뽑아올때)
		//hasNext=값이 있냐?
		//타입이 명확할땐 제네릭 선언해주는게 좋음
		Iterator<String> it = map.keySet().iterator();
		while(it.hasNext()) {
			String key = it.next();
//			String key = (String) it.next();
			int	   value = (int) map.get(key);
			System.out.println(key+", "+value);
		}
		
		
	}
}

 

2

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;

public class MapExample2 {
	public static void main(String[] args) {
		// emp_no, emp_name, dept, tel
		//	100   	장승수	영업부	010-8422-8117
		
		/*
		 * 해쉬맵에 각각
		 * key	emp_no,	emp_name, dept, 	tel
		 * value 100  ,장승수	,     영업부,		010-8422-8117
		 * 		 101  ,홍성범,	    기획부,		010-7562-3217	
		 * 
		 * 입력해 보기()
		 * .put(key , value);
		 * 
		 */
		
		HashMap map = new HashMap();
		map.put("emp_no"	, "100");
		map.put("emp_name"	, "장승수");
		map.put("emp_dept"	, "영업부");
		map.put("emp_tel"	, "010-8422-8117");
		
		HashMap map2 = new HashMap(); 
		map2.put("emp_no"	,	"101");
		map2.put("emp_name"	,	"홍성범");
		map2.put("dept"	,	"기획부");
		map2.put("tel"	,	"010-7562-3217");
		
		
		// map에 emp_no 값 가져오기
			
		String emp_no = (String)map.get("emp_no");
		System.out.println(emp_no);
		
		// map2에 emp_name 값 가져오기
		
		String emp_name = (String)map2.get("emp_name");
		System.out.println(emp_name);
		
		// 리스트에 맵 담아볼 것
		ArrayList l = new ArrayList();
		// 리스트 값 더하는 방법 .add();
		l.add(map);
		l.add(map2);
		
		
		// tel 값 꺼내보기.
		String tel = (String)map.get("emp_tel");		
		System.out.println(tel);
		
		String tel2 = (String)map2.get("tel");		
		System.out.println(tel2);
		
		// 전체 꺼내보기.
		System.out.println("전체 출력");
		Iterator it = map.keySet().iterator();
		while(it.hasNext()) {
			String 	key   = (String) it.next();
			String	value = (String) map.get(key);
			System.out.println(key+", "+value);
		}	
	}
}

 

 

3

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class MapExample3 {
	
	public static void main(String[] args) {
		MapExample3 me 	= new MapExample3();
		List<Map> l 	= me.dataInput();
		int maxSalary	= me.getMaxSalary(l);
		System.out.println("직원의 최대 월급은: "+maxSalary);
		List addDept	= me.getAddDept(l);
		me.printEmp_no103(l);		
	}
	
	public List<Map> dataInput(){
		
	//  emp_no, emp_name, dept,  tel,           salary
//		100   	장승수	영업부	010-8422-8117	300
//		101   	홍성범	기획부	010-7562-3217	350
//		102   	이만수	기획부	010-5562-6677	500
//		103   	강나미	영업부	010-4442-5614	350
//		109   	민병철	총무부	010-2542-8211	250
		
		/*
		 * 5개의 맵을 각각 선언 및 데이터 입력 
		 */
		HashMap m1 = new HashMap();
		m1.put("emp_no", "100");
		m1.put("emp_name", "장승수");
		m1.put("dept", "영업부");
		m1.put("tel", "010-8422-8117");
		m1.put("salary", "300");
		
		HashMap m2 = new HashMap();
		m2.put("emp_no", "101");
		m2.put("emp_name", "홍성범");
		m2.put("dept", "기획부");
		m2.put("tel", "010-5562-6677");
		m2.put("salary", "350");
		
		HashMap m3 = new HashMap();
		m3.put("emp_no", "102");
		m3.put("emp_name", "이만수");
		m3.put("dept", "기획부");
		m3.put("tel", "010-5562-6677");
		m3.put("salary", "500");
		
		HashMap m4 = new HashMap();
		m4.put("emp_no", "103");
		m4.put("emp_name", "강나미");
		m4.put("dept", "영업부");
		m4.put("tel", "010-4442-5614");
		m4.put("salary", "350");
		
		HashMap m5 = new HashMap();
		m5.put("emp_no", "109");
		m5.put("emp_name", "민병철");
		m5.put("dept", "총무부");
		m5.put("tel", "010-2542-8211");
		m5.put("salary", "250");
		
		
		
		/*
		 * 5개의 맵을 리스트를 선언해 입력  할 것.
		 */
		ArrayList l = new ArrayList();
		l.add(m1);
		l.add(m2);
		l.add(m3);
		l.add(m4);
		l.add(m5);
		
		
		
		/*
		 * 리스트에 각 맵을 입력한후 리턴 해볼 것.
		 */
		
		
		return l;
	}
	
	public int getMaxSalary(List<Map> l) {
		// 제일 높은 월급.
		int max = 0;
		for (Map map : l) {
			// 월급인 salary 문자열 값 꺼내기
			String salary = (String)map.get("salary");
			// 문자열들 비교를 위해 숫자로 변환하기
			int	salaryInt = Integer.parseInt(salary);
			// 맥스 값이랑 비교해서 더 크다면 max 값에 저장하기
			if(salaryInt > max) {
				max = salaryInt;
			}
		}
		
		return max;
	}
	
	public List getAddDept(List<Map> l) {
		// 각 부서별 월급 합 구하기.
		ArrayList salSum = new ArrayList();
		HashMap sum = new HashMap();
		for (Map map : l) {
			String dept		= (String) map.get("dept");
			String salary	= (String) map.get("salary");
			int	   salaryInt = Integer.parseInt(salary);
			if(sum.containsKey(dept)) salaryInt +=(int) sum.get(dept);
			sum.put(dept, salaryInt);
		}
		System.out.println(sum);
		/*
		 * sum 값 전체 꺼내서 salSum 넣어 보기
		 */
		Iterator it = sum.keySet().iterator();
		while(it.hasNext()) {
			String key = (String) it.next();
			int value = (int) sum.get(key);
			salSum.add(value);
		}
			
		return salSum;
	}
	private void printEmp_no103(List<Map> l) {
		for(int i = 0; i<l.size(); i++) {
			Map m = l.get(i);
			// no_103인 사람 찾기
			String emp_no = (String) m.get("emp_no");
			// no_103이 아니라면 continue로 다음 포문 진행하기.
			if(!emp_no.equals("103")) continue;
				
			
			
			// 모든 정보 출력하기.
			Iterator it = m.keySet().iterator();
			System.out.println("-----------------");
			while(it.hasNext()) {
				String key = (String) it.next();
				String value = (String) m.get(key);
				System.out.println(value+"\t");
			}
			System.out.println();	
			System.out.println("----------------");
			
		}
		
	}
}

 

 

4

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class MapExample4 {

	public static void main(String[] args) {

		MapExample4 me = new MapExample4();
		List<Map> l = me.dataInput();
//		me.printAll(l);
		int min = me.getMin(l, "5961");
		System.out.println("5961번의 총 주차 시간은"+ min +"분");
		int pay = me.pay(min);
		System.out.println("5961번의 총 주차 요금은"+ pay +"원");

	}
	
	public int pay(int min) {
//		기본 시간(분)	기본 요금(원)	단위 시간(분)	단위 요금(원)
//		180					5000			10					600
		if(min<=180) return 5000;
		// 기본 시간 제외
		min = min-180;
		// 10분 단위 계산
		min = min/10;
		return 5000+min*600;
	}

	// 주차장에 얼마나 머물렀는지
	public int getMin(List<Map> l, String number) {

		// 선택된 차량 값 담아보기.
		//<>에 Map을 쓰면 향상된 for문 사용 가능
		ArrayList<Map> selectList = new ArrayList();
		// list 에서 for 문을 이용해서 map 값 꺼내기
		for (Map m : l) {
			m.get("차량 번호");
			String car_no = (String) m.get("차량 번호");
			// 차량 번호 값이 number 랑 같은지 비교하기
			if (!car_no.equals(number)) {
				// 아닐 경우 continue 하기
				continue;
			}
			selectList.add(m);
		}
		
		String in  = "";
		String out = "";
		
		int result = 0;
		for (int i = 0; i < selectList.size(); i++) {
			Map m = selectList.get(i);
			String time = (String) m.get("시각");
//			System.out.println(time);
			String inout = (String) m.get("내역");
			// 내역 이 입차라면 in 에 시각 입력
			if(inout.equals("입차")) in = time;
			// 내역이 출차라면 out 에 시각 입력
			if(inout.equals("출차")) {
				out = time;
				// 내역이 출차 일 경우 주차시간 구하기.
				
				
				int t1 = getTime(in);
				int t2 = getTime(out);
				result += t2-t1;
//				System.out.println(result);
				
			}
			
		}

		return result;
	}
	public int getTime(String t) {
		String[] token = t.split(":");
		// toekn[0] 값 숫자로 변환해서 넣기		
		int	hour= Integer.parseInt(token[0]);
		// toekn[1] 값 숫자로 변환해서 넣기
		int	min= Integer.parseInt(token[1]);
		
		return hour*60 + min;
		
	}
		
	public void printAll(List<Map<String, String>> l) {
		/*
		 * 전체 값 출력 해볼 것 1. for문으로 리스트 꺼냄 2. 이터레이터로 전체출력
		 */
		for (int i = 0; i < l.size(); i++) {
			Map<String, String> m = l.get(i);
			Iterator<String> it = m.keySet().iterator();
			while (it.hasNext()) {
				String key	 = it.next();
				String value = m.get(key);
				
//				String key	 = (String) it.next();
//				String value = (String) m.get(key);
				System.out.print(key + ", " + value + "\t");
			}
			System.out.println();
		}

	}

	public List<Map> dataInput() {

//		시각		차량 번호	 내역
//		05:34	5961	 입차
//		06:00	0000	 입차
//		06:34	0000	 출차
//		07:59	5961	 출차
//		07:59	0148	 입차
//		18:59	0000	 입차
//		19:09	0148	 출차
//		22:59	5961	 입차
//		23:00	5961	 출차
		HashMap m1 = new HashMap();
		m1.put("시각", "05:34");
		m1.put("차량 번호", "5961");
		m1.put("내역", "입차");

		HashMap m2 = new HashMap();
		m2.put("시각", "06:00");
		m2.put("차량 번호", "0000");
		m2.put("내역", "입차");

		HashMap m3 = new HashMap();
		m3.put("시각", "06:34");
		m3.put("차량 번호", "0000");
		m3.put("내역", "출차");

		HashMap m4 = new HashMap();
		m4.put("시각", "07:59");
		m4.put("차량 번호", "5961");
		m4.put("내역", "출차");

		HashMap m5 = new HashMap();
		m5.put("시각", "07:59");
		m5.put("차량 번호", "0148");
		m5.put("내역", "입차");

		HashMap m6 = new HashMap();
		m6.put("시각", "18:59");
		m6.put("차량 번호", "0000");
		m6.put("내역", "입차");

		HashMap m7 = new HashMap();
		m7.put("시각", "19:09");
		m7.put("차량 번호", "0148");
		m7.put("내역", "출차");

		HashMap m8 = new HashMap();
		m8.put("시각", "22:59");
		m8.put("차량 번호", "5961");
		m8.put("내역", "입차");

		HashMap m9 = new HashMap();
		m9.put("시각", "23:00");
		m9.put("차량 번호", "5961");
		m9.put("내역", "출차");

		ArrayList l = new ArrayList();
		l.add(m1);
		l.add(m2);
		l.add(m3);
		l.add(m4);
		l.add(m5);
		l.add(m6);
		l.add(m7);
		l.add(m8);
		l.add(m9);

		return l;
	}
}