Java 맵

HAEIL·2024년 1월 26일

JAVA

목록 보기
2/8

Map

Map 자료형은 key-value로 구성됨
(이전에 공부했던 Dictionary 형태도 동일하나 차이점은 중복된 key값의 허용 여부
Map : 중복된 key 값 허용되지 않음
vs
Dictionary : 중복된 key 값 허용됨)

Map 자료형에는 HashMap, LinkedHashMap, TreeMap 등이 있다.

HashMap

put(String key, String value)

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>으로 선언

get(String key)

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 형태를 하나로 탁! 정해둔건 아니고 그대로 반환시켜주나보다..


getOrDefault(String key, String 기본값);

살짝 JS의 ?. 문법 같이 예외처리를 쉽게 해주는 메소드도 있다.

getOrDefault("java", "기본"); //키값이 java가 있으면 해당 value, 없으면 "기본" 출력

이렇게 작성하면 key값에 해당하는 값이 있으면 value값을, 없으면 기본값을 리턴해준다.

containsKey(String key);

(... 생략 ...)
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

remove(String key);

(... 생략 ...)
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를 전달한다.

size();

map.size(); //맵 요소의 개수(키-밸류 쌍의 개수) 출력

length랑 헷갈리지 않게 조심해야겠다.
+빈 경우에는 0이 나오려나?
+remove도 그렇고 빈 map에는 어떤 반응을 보이는지 테스트 필요하겠다.

keySet();

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의 의미보다는 키값을 이용해서 집합 형태를 만들어준다.는 의미가 맞음"

리스트(ArrayList)와 맵(Map)의 차이

리스트는 순서가 중요하다.
--> (int)index를 통해서 관리
맵은 순서에 의존하지 않는다.
--> (String)key값을 이용해서 관리
- LinkedHashMap : 입력된 순서대로 데이터를 저장
- TreeMap : 입력된 key의 오름차순으로 데이터를 저장

위와 같은 차이가 있다. LinkedHashMap이나 TreeMap을 써도 그저 저장만 순서대로 될 뿐 결국 인덱스 값을 가지지 않는다는 것이 가장 큰 차이인 것 같다.

나중에 참고할 블로그 :

profile
컴퓨터공학과를 졸업할 동안 개발을 소홀히 하다가 이제는 진짜 해야겠다 싶어서 시작한 블로그. 사족을 담아 최대한 이해하기 쉽게 작성하다보니 실제 전문가가 보기엔 틀린 점이 있을 수 있다...

0개의 댓글