JAVA/HIGH JAVA

[JAVA] Map

아잠만_ 2024. 4. 24. 12:43

Map

  • key값과 value값을 한 쌍으로 관리하는 객체
  • key값은 중복을 허용하지않고 순서(index)가 없다 (Set의 특징을 갖는다)
  • value값은 중복을 허용한다.

map의 메서드

  1. 자료 추가  ==> put(key값, value값) 
  2. 자료 수정 ==> put(key값, value값) 
    데이터를 추가할 때 key값이 같으면 나중에 추가한 값이 저장된다.
  3. 자료 삭제 ==> remove(key값)
    key값이 같은 자료를 찾아서 삭제한다
    반환값 : 삭제된 자료의 value값
  4. 자료 읽기 ==> get(key값)
    key값과 짝이되는 value값을 반환한다.
    key값이 없으면 null을 반환한다.
  5. key값이 존재하는지 여부 나타내는 메서드  ==> containsKey(key값)
    해당 'key값'이 있으면 true, 없으면 false
  6. Map에 저장된 전체 데이터를 차례로 사용하는 방법
    1. key값을 이용하는 방법 ==> keySet()
      - Map에 저장된 모든 key값들을 읽어와 Set형으로 반환한다.
         Set<String> keySet = map.keySet();
      ( iterator와 향상된 for문으로 처리할 수 있다 )
    2. value값을 이용하는 방법 ==> values()
      value값만 읽어온다
      for(String value : map.values()) {}
    3. Map의 내부 객체인 Entry객체를 이용하는 방법 ==> entrySet()
      (읽어온 Entry들은 Set형식으로 되어있다.)
      [ Map에는 Entry라는 내부class가 만들어져있다.
        이 Entry클래스는 key와  value라는 멤버변수로 구성되어있다.
        Map에서는 이 Entry클래스를 Set형식으로 저장하여 관리한다 ]
      Set<Map.Entry<String, String>> entrySet = map.entrySet();
      ( iterator와 향상된 for문으로 처리할 수 있다 )

import java.util.HashMap;

public class MapTest {
	public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();
		// put(key값, value값)
		map.put("name", "홍길동");
		map.put("addr", "대전");
		map.put("tel", "010-1234-4567");
		
		System.out.println("map => "+ map);	// map => {name=홍길동, tel=010-1234-4567, addr=대전}
		
		// 자료 수정
		map.put("addr", "서울");
		System.out.println("map => "+ map);	// map => {name=홍길동, tel=010-1234-4567, addr=서울}
	
		// remove(key값) 
//		String removeTel = map.remove("tel");
//		System.out.println("map => "+ map);	// map => {name=홍길동, addr=서울}
//		System.out.println("삭제된 값 : "+removeTel);	// 삭제된 값 : 010-1234-4567 
		
		// get(key값)
		System.out.println("이름 : "+map.get("name"));	// 이름 : 홍길동
		System.out.println();
		
		// containsKey(key값)
		System.out.println("tel 키값의 존재 여부 : "+map.containsKey("tel"));	// tel 키값의 존재 여부 : true
		System.out.println("age 키값의 존재 여부 : "+map.containsKey("age"));	// age 키값의 존재 여부 : false
		
        // Map에 저장된 전체 데이터를 차례로 사용하는 방법
		
		//keySet()
		Set<String> keySet = map.keySet();
		
		// set형을 Iterator를 이용하여 처리하기
		Iterator<String> it = keySet.iterator();
		while(it.hasNext()) {
			String key = it.next();
			String value = map.get(key);
			System.out.println(key + " : "+ value);
		}
		System.out.println();
        
		// 향상된 for문을 이용하여 처리하기
		for(String key : keySet) { // for(String key : map.ketSet())
			String value = map.get(key);
			System.out.println(key + " = "+ value);
		}
        
     	  	 // values() 
		for(String value : map.values()) {
			System.out.println(value);
		}
		
		System.out.println();
		
		
		// entrySet()
		// Entry라는 내부 객체 전체를 가져오기
		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		
		// iterator로 구하기
		Iterator<Map.Entry<String, String>> entryIt = entrySet.iterator();
		while(entryIt.hasNext()) {
			// Entry 객체 1개 구하기
			Map.Entry<String, String> entry = entryIt.next();
			System.out.println("key 값 : "+entry.getKey());
			System.out.println("value 값 : "+entry.getValue());
		}
		
		//for문으로 구하기
		for(Map.Entry<String, String> entry : entrySet) { // for(Map.Entry<String, String> entry : map.entrySet)
			System.out.println("key 값 : "+entry.getKey());
			System.out.println("value 값 : "+entry.getValue());
		}
        
	}
}