국비 19-1

냐아암·2023년 5월 12일
0

국비

목록 보기
25/114

Map

Key와 Value 한 쌍이 데이터가 되어 이를 모아둔 객체

  • Key를 모아두면 Set의 특징 (중복 X)
    키가 중복되는 경우, 기존에 있는 키에 해당하는 값을 덮어 씌움
  • Value를 모아두면 List의 특징 (중복 O)

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


  • map.put(K,V) : Key, Value 값 추가
    map.put(1, "홍길동");
  • map.get(K) : 'K' key가 가지고 있는 value값 반환
    map.get("id")
  • map.ketSet
    Map에서 Key만 모아놓으면 Set의 특징을 갖고 있음
    -> Key만 모아서 Set으로 반환
    Set<String> set = map.keySet();
    cf
    map에 저장된 데이터가 많거나 어떤 키가 있는지 불분명할 때 또는 map에 저장된 모든 데이터에 접근해야 할 때 keySet() + 향상된 for문 사용
for(String key :set) { //value값 출력
			System.out.println(map.get(key))							
	}

Ex)
Map자료형의 List

  • 향상된 for문으로 특정 키 값("pw") 갖는 value 모두 출력하기
for(Map<String, Object> temp : list) {
			//자료형     변수   리스트
			System.out.println(temp.get("pw"));
	}

MapService

package edu.kh.collection.model.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import edu.kh.collection.model.vo.Member;


/*제대로 알기
 List Set Map 특징

기본 사용법 equals() hashCode()

Wrapper Class 향상된 for문
 */




public class MapService {
	
	//Map: Key와 Value 한 쌍이 데이터가 되어 이를 모아둔 객체
	
	// - Key를 모아두면 Set의 특징 (중복 X)
	// - Value를 모아두면 List의 특징 (중복 O)
	
	public void ex1() {
		
		//hashMap<K, V>: Map의 자식 클래스 중 가장 대표되는 Map
		
		Map<Integer, String> map = new HashMap<Integer, String>();
		
		// Map.put(Integer Key, String Value): 추가(put: 놓다)
		map.put(1,  "홍길동");
		map.put(2,  "김길동");
		map.put(3,  "박길동");
		map.put(4,  "고길동");
		map.put(5,  "이길동");
		map.put(6,  "최길동");
		
		//Key 중복
		map.put(1, "홍홍홍"); //중복 허용X , Value 덮어쓰기
		
		//Value 중복
		map.put(7, "최길동"); //중복 O
		
		System.out.println(map); //map.toString() 오버라이딩 되어있음
		
	}
	
	public void ex2() {
		
		//Map의 사용 예제
		
		//VO(값 저장용 객체)는 특정 데이터 묶음의 재사용이 많은 경우 주로 사용
		//-> 재사용이 적은 VO는 오히려 코드 낭비
		//-> Map을 이용해서 VO와 비슷한 코드를 작성할 수 있다.
		
		// 1) VO 버전
		Member mem = new Member();
		
		// 값 세팅
		mem.setId("user01");
		mem.setPw("pass01");
		mem.setAge(30);
		
		// 출력
		System.out.println(mem.getId());
		System.out.println(mem.getPw());
		System.out.println(mem.getAge());
		
		System.out.println("-------------------------------------");
		
		// 2) Map 버전
		Map<String, Object> map = new HashMap<String, Object>();
		//value가 Object 타입 == 어떤 객체든 value에 들어올 수 있다.
		
		// 값 세팅
		map.put("id", "user02");
		map.put("pw", "pass02");
		map.put("age",25);
					//int -> Integer(Autoboxing) - 대입 -> Object
		// 값 출력
		System.out.println(map.get("id").toString());
		//String java.lang.Object.toString() -> 정적 바인딩
		//실행 중 확인해보니까 String 자식 객체 -> toString() 호출 -> 동적 바인딩
		System.out.println(map.get("pw"));
		System.out.println(map.get("age"));
		
		// *** Map에 저장된 데이터 순차적으로 접근하기 ***
		
		// Map에서 Key만 모아두면 Set의 특징을 가진다.
		// -> 이를 활용할 수 있도록 Map에서 KeySet() 메소드 제공
		// --> Key만 모아서 Set으로 반환
		
		Set<String> set = map.keySet(); //map은 위에서 만든 참조변수 
										//id, pw, age가 저장된 Set 반환
		System.out.println(set); //[pw, id, age]
		
		//향상된 for문
		for(String key :set) { //value값 출력
			System.out.println(map.get(key));
								// key가 반복될 때마다 변경
								//-> 변경된 key에 맞는 map의 value가 출력
		}
		
		//map에 저장된 데이터가 많거나 어떤 키가 있는지 불분명할 때
		//또는 map에 저장된 모든 데이터에 접근해야 할 때
		//keySet() + 향상된 for문 사용
		
	}
	
	public void ex3() {
		
		List< Map<String, Object> > list = new ArrayList<Map<String, Object>>();
		
		for(int i = 0;i<10; i++) {
			//Map 생성
			Map<String, Object> map = new HashMap<String, Object>();
			
			//Map에 데이터 추가
			map.put("id", "user0" + i);
			map.put("pw", "pass0" + i);
			
			//Map을 List에 추가
			list.add(map);
			
		}
		
		//for문 종료 시 List에는 10개의 Map 객체가 추가되어 있다.
		
		// *List에 저장된 Map에서 key가 "id"인 경우의 value 모두 출력
		
		//향상된 for문
		for(Map<String, Object> temp : list) {
			//자료형               변수    리스트
			System.out.println(temp.get("pw"));
		}
		
		
		System.out.println(list);

	}
	

}

MapRun

package edu.kh.collection.run;

import edu.kh.collection.model.service.MapService;

public class MapRun {

	public static void main(String[] args) {

		MapService service = new MapService();
		
//		service.ex1();
//		service.ex2();
		service.ex3();
		
		
		
	}

}
profile
개발 일지

0개의 댓글