키와 값으로 이루어진 데이터 구조이다
키, 값이 존재하기때문에 대응관계를 쉽게 표현할수있다
ex) 이름 = 박은빈
Map은 List처럼 순차적으로 들어가지않고 key를 통해 value를 얻는다
이러한 장점덕분에 Map은 get(hashMap들, EnumMap)에서 시간복잡도가 1이다
map중에서도 제일 자주 쓰이는 hashMap이다
이 hashMap은 키, 값으로 이루어져있고 각 키와 값의 진짜위치는 해시함수를 통해 정하기때문에 알 수 없다
HashMap<String, Integer> = new HashMap<>();
HashMap<String, Integer> = new HashMap<>(map); //map의 값을 가진 hashMap생성
HashMap<String, Integer> = new HashMap<>(10); //초기 용량 지정
HashMap<String, Integer> = new HashMap<>(10, 0.7f);
//초기용량(capacity)와 load factor지정
제네릭 <>안에 왼쪽은 키의 타입, 오른쪽은 값의 타입이다
HashMap은 초기 용량이 16, load factor는 0.75로 정해져있고
그 용량의 과부하수준 16*0.75 = 12에 도달하면 용량을 2배로 늘리게된다
그래서 용량을 미리 알고있다면 용량과 로드팩터를 미리 지정해서 메모리 낭비를 줄일 수 있다
map에 값을 추가하고싶으면 put()을 이용해 추가한다
map.put("사과",1);
map.put("바나나",1);
map.put("포도",6);
map.put("오렌지",5);
map.put("수박",12);
map.put("사과",2);
//사과의 값이1이었던게 2로 바뀐다
만약 키값이 이미 내부에 존재한다면 value(값)는 해당 값으로 다시 바뀌게 된다
만약 하나의 키에 해당하는 값을 삭제하고싶으면 remove()를 사용한다
그리고 모든 값을 다 삭제하고싶으면 clear()를 사용한다
map.remove("바나나");
map.clear();
기본적으로 맵에 있는 값을 출력하고싶으면 get()을 이용한다
또한 전체를 출력하고싶으면 해당 hashMap의 이름을 넣는다
System.out.println(map.get("사과")); //2
System.out.println(map) // {사과=2, 바나나=1...}
또한 키와 값을 따로 출력하고싶을때는 Entry를 이용한다
for(Entry<String, Integer> entry : map.entrySet() {
System.out.println("Key : " + entry.getKey() + " = Value : " + entry.getValue());
}
위의 코드는 for each문과 Entry를 이용해 키와 값을 출력하였다
또 키값을 알고싶을때는 keySet()을 이용한다
for(Integer i : map.keyset()) {
System.out.println(i);
}
//사과, 바나나 ...