핵심 Point❗ (VO 생성 없이)
여러개의 ( 키(key)와 값(value) )을 하나의 객체(인스턴스)로 만들어 낼 수 있다.Ex)key : value "name":"홍길동" "address":"서울시 중구"
키(key)와 값(value)으로 구성되어 있으며, 키와 값은 모두 객체
키는 중복 저장을 허용하지 않고(Set방식), 값은 중복 저장 가능(List방식)
HashMap : 중복을 허용하지 않고 순서를 보장하지 않으며 null 값을 허용한다.
Hashtable : HashMap 보다는 느리지만 동기화를 지원하며 null 값을 허용하지 않는다.
TreeMap : 정렬된 순서대로 Key와 Value를 저장하므로 빠른 검색이 가능하지만 요소를 추가할 때 정렬로 인해 오래걸린다.
LinkedHashMap : HashMap과 기본적으로 동일하지만 입력한 순서대로 접근이 가능하다.
객체 검색
Map에 담겨있는 요소들에 순차적으로 접근하기 위한 방법 2가지
1. Set keySet() 으로 Map의 Key를 Set에 담은후 Set에 있는 Iterator를 통해 접근
2. Set entrySet() 으로 Map의 키와 값을 Set에 담은 후 Set에 있는 Iterator를 통해 접근
키 객체는 hashCode()와 equals()를 재정의해 동등 객체가 될 조건을 정해야 함
때문에 키 타입은 hashCode와 equals()메소드가 재정의되어 있는 String타입을 주로 사용
예) Map<K, V> map = new HashMap<K, V>();
// 객체 생성
Map<Integer, String> map = new HashMap<Integer, String>();
// 값 입력
map.put(1, "홍길동");
map.put(Integer Key, String Value)
System.out.println(map); // map.toString() 오버라이딩 되어있음.
------------------------------------------------------------
// key를 불러옴
Set<String> set = map.keySet();
for(String key : set) {
System.out.println(map.get(key));
} // key의 value를 리턴
----------------------------------------------------------
List + Map
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.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("id"));
}
}