Map 자료형은 key-value로 구성됨
(이전에 공부했던 Dictionary 형태도 동일하나 차이점은 중복된 key값의 허용 여부
Map : 중복된 key 값 허용되지 않음
vs
Dictionary : 중복된 key 값 허용됨)
Map 자료형에는 HashMap, LinkedHashMap, TreeMap 등이 있다.
import java.util.HashMap; //Hashmap도 import 시켜줘야한다.
public class Sample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>(); //String 자료형으로 제네릭스 이용한다.
map.put("people", "사람");
map.put("baseball", "야구");
}
}
HashMap의 key-value는 무조건 String 자료형으로만 가능
--> Generics는 무조건 <String, String>으로 선언
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
System.out.println(map.get("people")); // "사람" 출력
}
}
retrun 값이 String value 인건가?

HashMap의 메소드를 타고 들어가보니, 그냥 해당 타켓의 value값을 return해준다고 한다...
Java는 그냥 retrun 형태를 하나로 탁! 정해둔건 아니고 그대로 반환시켜주나보다..

살짝 JS의 ?. 문법 같이 예외처리를 쉽게 해주는 메소드도 있다.
getOrDefault("java", "기본"); //키값이 java가 있으면 해당 value, 없으면 "기본" 출력
이렇게 작성하면 key값에 해당하는 값이 있으면 value값을, 없으면 기본값을 리턴해준다.
(... 생략 ...)
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("baseball", "야구");
System.out.println(map.containsKey("people")); // true 출력
for문을 돌리지 않고도 해당 맵 자료형에 key가 있는 지 없는지도 판단해준다....
얘는 return 값이 true or false
(... 생략 ...)
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("baseball", "야구");
System.out.println(map.remove("people")); // "사람" 출력
자바의 Map 속 remove 메소드는 다른 배열 구조들의 .pop()과 비슷한가보다.
key값과 해당 key값에 대응하는 value 한 쌍을 모두 삭제한 후, return으로 삭제된 value를 전달한다.
map.size(); //맵 요소의 개수(키-밸류 쌍의 개수) 출력
length랑 헷갈리지 않게 조심해야겠다.
+빈 경우에는 0이 나오려나?
+remove도 그렇고 빈 map에는 어떤 반응을 보이는지 테스트 필요하겠다.
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("baseball", "야구");
System.out.println(map.keySet()); // [baseball, people] 출력
}
}
집합(Set) 자료형으로 리턴한다고 한다..
ArrayList<String> keyList = new ArrayList<>(map.keySet());
이런 형태로 리스트(ArrayList)로도 바꿔서 사용할 수 있다는데 한글과 영어를 혼용해서 쓰니까 괜히 더 헷갈린다.
"keySet()의 Set은 get/set의 설정한다는 set의 의미보다는 키값을 이용해서 집합 형태를 만들어준다.는 의미가 맞음"
리스트는 순서가 중요하다.
--> (int)index를 통해서 관리
맵은 순서에 의존하지 않는다.
--> (String)key값을 이용해서 관리
- LinkedHashMap : 입력된 순서대로 데이터를 저장
- TreeMap : 입력된 key의 오름차순으로 데이터를 저장
위와 같은 차이가 있다. LinkedHashMap이나 TreeMap을 써도 그저 저장만 순서대로 될 뿐 결국 인덱스 값을 가지지 않는다는 것이 가장 큰 차이인 것 같다.
나중에 참고할 블로그 :