map

Mia Lee·2022년 2월 9일
0

JAVA

목록 보기
98/98
package ex_map;

import java.util.*;
import java.util.Map.*;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * Map 계열
		 * 
		 */
		
		Map map = new HashMap();
		
		// put(Object key, Object value) : key에 해당하는 위치에 value 저장
		map.put(1, "Java"); // 정수 1에 해당하는 키에 문자열 "Java" 값 저장
		map.put(2, "JSP");
		map.put(3, "Android");
		
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		
		// 중복되는 키를 사용하여 다른 값을 저장하는 경우
//		map.put(3, "Oracle"); // 정수 3에 해당하는 키에 문자열 "Oracle" 값 저장
		// => 기존에 3번 키가 존재하므로 "Android"값을 제거하고, "Oracle"값 저장(덮어쓰기)
		//    이 때, 제거되는 "Android"값 Object 타입으로 리턴됨
		System.out.println("3번 키에 Oracle 문자열 저장 : " + map.put(3, "Oracle"));
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		
		// 새로운 키에 중복된 값을 저장하는 경우
		map.put(4, "JSP");
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		
		// Object get(Object key) : key에 해당하는 value 리턴
		// => key가 존재하지 않으면 null값 리턴됨
		System.out.println("정수 2에 해당하는 키의 데이터 : " + map.get(2)); // JSP
		System.out.println("정수 6에 해당하는 키의 데이터 : " + map.get(6)); // null
		
		// Set keySet() : Map 객체 내의 모든 키 리턴
		// => Set 타입 변수에 저장하거나 Set 타입 객체 형토로 직접 사용 가능
		System.out.println("map 객체 내의 모든 키 : " + map.keySet());
		
		// Collection values() : Map 객체 내의 모든 값 리턴
		// => Set 타입 또는 List 타입 등의 변수에 할당 불가능(다운캐스팅 X)
		System.out.println("map 객체 내의 모든 값 : " + map.values());
		
//		Set values = (Set) map.values(); // 다운캐스팅 시 예외 발생!
//		List values = (List) map.values();
		
		// Set 또는 List 계열 객체 생성 시 파라미터로 전달하여 객체 변환 가능
//		List values = new ArrayList(map.values());
		
		Set values = new HashSet(map.values());
		// => 만약, 중복된 값이 존재할 경우 Set 타입으로 관리하면 중복이 제거되므로 주의!
		
		System.out.println("map 객체(map->set) 내의 모든 값 : " + values);
		
		// Set entrySet() : 키와 값을 한 쌍으로 갖는 Map.Entry 객체의 모임
		// => 키와 값의 한 쌍이 다른 키와 값의 한 쌍과 중복될 수 없으므로 Set 타입으로 관리됨
		Set entrySet = map.entrySet();
		System.out.println(entrySet);
		
		System.out.println("map 객체가 비어있는가? " + map.isEmpty());
		System.out.println("map 객체에 저장된 요소 갯수 : " + map.size());
		
		// 요소를 제거하는 remove() 메서드는 2가지로 제공됨
		// Object remove(Object key) : key에 해당하는 요소(key, value) 제거
		System.out.println("4번 key에 해당하는 요소 제거 : " + map.remove(4));
		
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		// 만약, 존재하지 않는 키를 지정할 경우 : null 값 리턴됨
		System.out.println("4번 key에 해당하는 요소 제거 : " + map.remove(4));
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		
		// boolean remove(Object key, Object value) : key와 value 모두 일치하는 요소 제거
		System.out.println("3번 key의 Oracle 값에 해당하는 요소 제거 : " + map.remove(3, "Oracle"));
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		
		// 만약, 키와 값이 일치하지 않거나 존재하지 않는 키를 지정할 경우 false 리턴됨
		System.out.println("3번 key의 Oracle 값에 해당하는 요소 제거 : " + map.remove(3, "Oracle"));
		System.out.println("2번 key의 Java 값에 해당하는 요소 제거 : " + map.remove(2, "Java"));
		System.out.println("map 객체의 모든 키와 값 출력 : " + map);
		
		System.out.println("============================================");
		
		/*
		 * HashMap 객체(map2) 생성 후 다음 요소 추가
		 * 
		 * key					Value
		 * "010-1234-5678"		"홍길동"
		 * "010-2222-2222"		"이순신"
		 * "010-3333-3333"		"강감찬"
		 * 
		 */
		Map map2 = new HashMap();
		map2.put("010-1234-5678", "홍길동");
		map2.put("010-2222-2222", "이순신");
		map2.put("010-3333-3333", "강감찬");
		System.out.println(map2);
		
		System.out.println("================================");
		
		// Map 객체 반복하는 방법
		// 향상된 for문 / Iterator(반복자)
		// ex) 이름 : XXX, 전화번호 : XXX
		
		// 향상된 for문
		Set keySet = map2.keySet(); // 키값만 리턴받은 Set 객체
		for (Object phone : keySet) {
			System.out.println("이름 : " + map2.get(phone) + ", 전화번호 : " + phone);
		}
		
		System.out.println("===============");
		
		// Iterator
		// => Map 객체의 ketSet() 메서드를 호출하여 모든 키를 꺼낸 다음
		//    해당 Key가 저장된 Set 객체의 iterator() 메서드를 호출하여 Iteratro 객체 리턴받아 사용
		Set keySet2 = map2.keySet(); // 키값만 리턴받은 Set 객체
		Iterator iterator = keySet2.iterator();
		while (iterator.hasNext()) { // 다음 요소가 존재할 때까지 반복
			String phone = (String) iterator.next();
			
			String name = map2.get(phone).toString();
			
			System.out.println("이름 : " + name + ", 전화번호 : " + phone);
			
		}
		
		// key를 사용하지 않고, Map.Entry 객체를 통해 반복
		Set entrySet2 = map2.entrySet(); // 모든 엔트리 가져오기(-> Set)
		Iterator entryIterator = entrySet2.iterator();
		
		while (entryIterator.hasNext()) {
			// 엔트리 1개 꺼내서 Map.Entry 타입 변수에 저장(형변환 필요)
			Map.Entry entry = (Entry) entryIterator.next();
			
			// 1개 엔트리에서 getXXX() 메서드를 호출하여 각가의 키, 값 가져오기
			System.out.println("이름 : " + entry.getValue() + ", 전화번호 : " + entry.getKey());
			
		}
		
		// boolean containsKey(Object key) : 해당 key의 존재 여부 리턴
		// boolean containsValue(Object value) : 해당 value의 존재 여부 리턴
		System.out.println("010-1234-5678 전화번호가 존재가하는가? " + map2.containsKey("010-1234-5678"));
		System.out.println("010-1234-5678 전화번호가 존재가하는가? " + map2.containsValue("010-1234-5678"));
		System.out.println("홍길동 이름이 존재하는가? " + map2.containsValue("홍길동"));
		
		// 모든 키와 값을 초기화 
		// => void clear()
		map2.clear();
		System.out.println(map2);
		
		
		
		
	}

}







0개의 댓글