java - Map

imjingu·2023년 9월 7일
0

개발공부

목록 보기
463/481

Map은 key-value를 하나의 쌍으로 묶어서 저장하는 자료구조.
다른 언어에서는 딕셔너리 dictionary라고 함. Map은 사전과 같은 자료 구조.
즉 사전처럼 단어가 있고(이것을 키 key 라고 부름), 단어에 대한 설명(이것을 값 value 라고 부름)이 있음.
하나가 아닌 쌍 pair으로 되어 있는 자료를 관리하는 메서드들이 선언되어 있음.
key-value 쌍이라고 표현하는데 이 때 key는 중복될 수없음. value는 중복 가능.
Map은 기본적으로 검색용 자료 구조.
즉 어떤 Key 값을 알고 있을 때 value를 찾기 위한 자료구조.

package chapter20230906.HashMap;

import java.util.*;

public class HashMap01 {
	/* 이름을 key로, 점수를 value로 저장하기 */
	public static void main(String[] args) {
		// Map 컬렉션 생성
		Map<String, Integer> map = new HashMap<>();
		// <String, Integer> -> String을 키로, Integer를 값으로 사용
		
		// 객체 저장
		map.put("신용권", 85);
		map.put("홍길동", 90);
		map.put("동장군", 80);
		map.put("홍길동", 95); // key가  같기 때문에 제일 마지막 저장한 값으로 대체
		System.out.println("총 Entry 수 : " + map.size());
		
		// 객체 찾기
		// 이름(key)으로 점수(value)를 검색
		System.out.println("\t홍길동 : " + map.get("홍길동")); // key로 정수 값 검색
		System.out.println();
		
		// 객체를 하나씩 처리
		Set<String> keySet = map.keySet(); // keySet() : 모든 키를 Set 객체에 담아서 리턴. key Set 열기
		Iterator<String> keyIterator = keySet.iterator();
		// Iterator - 반복자 - 반복자는 객체 지향적 프로그래밍에서 배열이나 그와 유사한 자료구조의 내부요소를 순회하는 객체다
		while (keyIterator.hasNext()) {
			// hasNext - boolean형태로 다음 가져올 값이 있으면 true 없으면 false 반환
			String key = keyIterator.next(); // next() - Iterator 안에 있는 다음 요소값 반환, 아무타입 가능
			Integer value = map.get(key); // .get() - 주어진 키의 값(value)을 리턴
			System.out.println("\t" + key + " : " + value);
		}
		System.out.println();
		
		// foreach문을 사용해 출력
		for(Map.Entry<String, Integer> entry : map.entrySet()) {
			String strKey = entry.getKey();
			Integer intValue = entry.getValue();
			System.out.println(strKey + ":" + intValue);
		}
		System.out.println();
		
		// foreach문을 사용해 출력 좀 더 쉬운편
		for(var strKey : map.keySet()) {
			Integer intValue = map.get(strKey);
			System.out.println(strKey + ":" + intValue);
		}
		System.out.println();
		
		// 객체 삭제
		map.remove("홍길동"); // 키로 Map.Entry를 제거
		System.out.println("총 Entry 수 : " + map.size()); // 총 Entrry 수 : 2
		
		// 객체를 하나씩 정리
		// entrySet() : 키와 값의 쌍으로 구성된 모든 Map.Enry 객체를 Set에 담아서 리턴
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); // Map.Entry Set 얻기
		Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
		while(entryIterator.hasNext()) {
			Map.Entry<String, Integer> entry = entryIterator.next();
			String key = entry.getKey();
			Integer value = entry.getValue();
			System.out.println("\t" + key + ":" + value);
		}
		System.out.println();
		
		// 객체 전체 삭제
		map.clear();
		System.out.println("총 Entry 수 : " + map.size());
	}

}

package chapter20230906.HashMap;
import java.util.*;

class Student { // 학번과 키가 같다면 동일한 키로 인식
	public int sno;
	public String name;
	
	public Student(int sno, String name) {
		this.sno = sno;
		this.name = name;
	}
	@Override
	public int hashCode() { // 학번과 이름이 같다면 동일한 값을 리턴
		return sno + name.hashCode();
	}
	
	@Override
	public boolean equals(Object obj) { // 학번과 이름이 같다면 true를 반환
		if (obj instanceof Student) { // obj 와 Student 가 같은 객체인가
			Student student = (Student)obj; // obj를 Student 객체로 다운
			return (sno == student.sno) && (name.equals(student.name));
			// 클래스 Student 안에 sno와 obj안에 sno가 같거나 클래스 Student 안에 name와 obj안에 name가 같으면 true리턴
		}
		else {
			return false;
		}
	}
	
	
}
public class HashMap02 {

	public static void main(String[] args) {
		Map<Student, Integer> map = new HashMap<Student, Integer>();
		
		// 학번과 이름이 동일한 Student를 키로 저장
		map.put(new Student(1, "홍길동"), 95); // 하나 씩 넣어서 비교
		map.put(new Student(1, "홍길동"), 95);
		map.put(new Student(1, "박유신"), 85);
		
		System.out.println("총 Entry 수 : " + map.size()); // 저장된 총 map.entry 수 얻기

	}

}

0개의 댓글