Map

key,value 로 구성된 Entry 객체를 저장하는 구조

 

특징

1. 키와 값은 모두 객체

2. 키는 중복될 수 없음

3. 만약 동일한 키를 가지고 있는 Entry객체를 Map 컬렉션에 저장하면, 기존의 값은 없어지고 새로운 값으로 대치됨

 

 

컬렉션이란?

객체의 모음, 그룹이라고 할 수 있습니다.

Collection 인터페이스 : [ List, Set, Queue ] 인데,

Map 은 컬렉션이 사실 아니지만, 그냥 컬렉션으로 분류해줍니다.

 

컬렉션을 왜 사용할까?

1. 일관된 API

컬렉션 하위에 있는 모든 클래스 컬렉션에서 상속 받아 통일된 메서드가 사용 가능해집니다.

 

2. 프로그래밍 효율성

객체 지향 프로그램의 추상화 개념이 성공적으로 구현되어 있음

 

3. 프로그램 속도 및 품질 향상

유용한 데이터 구조 및 알고리즘을 지니고 있어 성능이 향상됩니다.

 

 

그러면 다시 돌아가 Map 에 대해 알아보도록 하겠습니다.

 

 

Map 컬렉션 기능 및 종류
  • 종류 : HashMap, HashTable, LinkedHashMap, Properties, TreeMap 등

Map Interface 의 메서드들은 특징에서 알아 봤듯이 키로 객체를 관리합니다.

그래서 키를 매개변수 값으로 사용하는 경우가 많습니다.

 

그러면 이제 HashMap 에 대해 알아보겠습니다.

 

HashMap

Map Interface 에서 대표적으로 많이 사용되는 Map Collection 입니다.

[ HashMap 의 키로 사용될 객체는 hashCode(),equals() 메서드를 오버라이딩해서 동등 객체 조건을 정의해야함 ]

 

  • 동등 객체가 될 조건

1) hashCode() : 같은 키 반환

2) equals() : true 반환

 

 

 

Iterator

컬렉션 구현 방법을 노출시키지 않으면서도 원소를 순차적으로 접근 가능하게 해줍니다.

 

[ Iterator 을 사용해 key, value 모두 반복하며 호출 ]

HashMap<Integer,Interger> map = new HashMap<>();
Iterator<map.Entry<Integer,Integer>> entries = map.entrySet().iterator();
while(entries.hasNext()){
	HashMap.Entry<Integer,Integer> entry = entries.next();
    sout(entry.getKey() + entry.getValue());

 

[ for loop 로 key값으로 value 찾기 ]

HashMap<Integer,Integer> map = new HashMap<>();
for(Integer Key : map.keySet()){
	Integer value = map.get(key);
    sout ( key + value );
}

 

 

 

getOrDefault

찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드

 

기본 형태

getOrDefault(Object Key, V DefaultValue)

- Key : 값을 가져와야 하는 요소

- defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본 값입니다.

 

기본 사용법

public class MapGetOrDefaultEx {
	public static void main(String arg[]) {
		String [] alphabet = { "A", "B", "C" ,"A"};
		HashMap<String, Integer> hm = new HashMap<>();
		for(String key : alphabet) hm.put(key, hm.getOrDefault(key, 0) + 1);
		System.out.println("결과 : " + hm);
        	// 결과 : {A=2, B=1, C=1}
	}
}

- 동일한 키 값을 추가할 경우 Value 의 값이 덮어쓰기 됩니다.

- 따라서 기존 key값의 value를 계속 사용하고 싶을 경우 getOrDefault 메서드를 사용해서 위의 예와 같이 사용할 수 있습니다.

'JAVA' 카테고리의 다른 글

HashSet  (0) 2022.08.11
Stream  (0) 2022.08.10
백트래킹  (0) 2022.07.27
람다식  (0) 2022.07.18
좋은 객체 지향 설계의 5가지 원칙  (0) 2022.07.08

+ Recent posts