Java

[고급자바] Collection(Map)

elog 2023. 3. 3. 18:00

1. Map

- key값, value값을 한 쌍으로 관리하는 객체

- key값 중복을 허용하지 않고 순서(index)가 없다. (Set의 특징을 갖는다.)

- value 값은 중복으로 허용한다.

 

A. 객체 생성

System.out.println("<객체 생성하기>");
HashMap<String, String> map = new HashMap<>();
		
System.out.println("처음 크기 : " + map.size());

 

B. 데이터 추가하기

System.out.println("<데이터 추가하기>");
// 자료 추가 ==> put(key값, value값)
map.put("name", "홍길동");
map.put("addr", "대전");
map.put("tel", "010-1234-5678");

System.out.println("map ==> " + map);

 

C. 데이터 수정하기

- 데이터를 추가할 때 key값이 같으면 나중에 입력한 값으로 덮어쓴다.

System.out.println("<데이터 수정하기>");
map.put("addr", "서울");

System.out.println("map ==> " + map);

 

D. 데이터 삭제하기

remove(key값)

: key값이 같은 자료를 찾아 삭제한다.

- 반환값 : 삭제된 자료의 value값이 반환된다.

System.out.println("<데이터 삭제하기>");
String sTemp = map.remove("tel");

System.out.println("map ==> " + map);
System.out.println("sTemp : " + sTemp);

 

E. 데이터 읽기

get(key값)

: key값이 같은 자료를 찾아 반환된다. 주어진 'key값'이 없으면 null이 반환된다.

System.out.println("<데이터 읽기>");
System.out.println("이름 : " + map.get("name"));

 

F. key값의 존재 여부 확인하기

System.out.println("<key값의 존재 여부 확인하기>");
System.out.println("tel 키 값의 존재 여부 : " + map.containsKey("tel"));
System.out.println("age 키 값의 존재 여부 : " + map.containsKey("age"));

 

G. Map에 저장된 모든 데이터 읽어와 사용하기

방법 1) 모든 key값을 가져와 처리하기

Set<String> keySet = map.keySet();

 

방법 1-1) ksySet() 정보를 Iterator로 처리하기

System.out.println("방법1-1) ksySet() 정보를 Iterator로 처리하기");
Iterator<String> it = keySet.iterator();
int a=1;

while (it.hasNext()) {
	String key = it.next();	// key값 1개 가져오기
	String value = map.get(key);
	System.out.println(a++ +" "+ key + " : " + value);
}

방법 1-2) keySet() 정보를 '향상된 for문'으로 처리하기

System.out.println("방법1-2) keySet() 정보를 '향상된 for문'으로 처리하기");
for (String key : map.keySet()) {
	String value = map.get(key);
	
	System.out.println(key + " => " + value);
}

 

방법 2) value값만 가져와 처리하기

System.out.println("방법2) value값만 가져와 처리하기");
for (String value : map.values()) {
	System.out.println(value);
}