Map 인터페이스
- Map 은 key(키)-value(값) 형태를 쌍으로 묶어 데이터를 저장하는 데 사용되는 인터페이스이다.
- 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 한다.
- pair 형태의 객체를 관리하는 데 필요한 메서드들이 정의되어 있다.
(여기서 키는 중복될 수 없고, 값은 중복되더라도 최근에 저장된 값이 최종으로 남는다. )
- Map 인터페이스를 구현한 클래스로는 LinkedHashMap, HashMap, SortedMap, TreeMap, HashTable 이 있다.
|
>> 용도에 따라 class 사용
- 가장 널리 쓰이는 것은 HashMap이지만 데이터 정렬이 필요하면 TreeMap, 삽입 순서를 기억해야 한다면 LinkedHashMap.. 이런 식으로 사용하면 된다.
Map 인터페이스와 HashMap의 차이점
- HashMap은 Map 인터페이스를 구현한 클래스이다.
- Map 인터페이스를 구현한 클래스 중 HashMap 클래스를 가장 많이 사용한다.
Map 인터페이스 사용법
Map 인터페이스만으로는 데이터를 보유할 수 없지만, 해당 클래스의 객체를 생성한 다음 Map 참조를 사용하여 객체를 보유할 수 있다.
import java.util.HashMap;
import java.util.Map;
public class Hash_prctice {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
// HashMap 클래스를 사용하여 데이터를 저장
map.put("하나",1);
map.put("둘",2);
map.put("셋",3);
System.out.println(map);
}
}
* Map 선언시
Map<String, String> map= new HashMap<>();
HashMap<String, Object> map2= new HashMap<>();
둘 다 표현 가능
인터페이스는 선언만 가능, 객체 생성이 불가능하기 때문에 자식인 HashMap으로 객체를 생성한다.
HashMap은 본인의 메소드 외에 부모인Map의 메소드들을 강제 상속받는다.
Map 인터페이스의 주요 메서드
- put(K key, V value) : Map에 자료 삽입 (key는 중복 허용 X, 중복된 key 값을 put 할 경우 값이 대체됨)
Map<String, Integer> map = new HashMap<>(); map.put("하나", 1);
Map<String, Integer> map = new HashMap<>(); map.put("둘", 2);
Map<String, Integer> map = new HashMap<>(); map.put("하나", 11);
// console >> {둘=2, 하나=11}
- putIfAbsent(K key, V value) : Map에 key가 존재하지 않을 때만 value 값을 넣어줌
Map<String, Integer> map = new HashMap<>();
map.put("하나",1);
map.put("둘",2);
map.put("셋",3);
System.out.println(map);
// {둘=2, 하나=1, 셋=3}
map.putIfAbsent("가나다", 2521); // '가나다'는 없는 key 값이기에 추가됨
System.out.println(map);
// {가나다=2521, 둘=2, 하나=1, 셋=3}
- computeIfAbsent 도 같은 개념이나, value 값에 함수형 인터페이스 Function이 들어간다.
- 반대 개념은 computeIfPresent (key가 존재하는 경우에 사용)
- getOrDefault(K key, V value) : key가 존재하면 value를 반환하고, key가 존재하지 않으면 지정한 Default값을 반환한다.
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
boolean isEmpty() | 해당 맵이 비어있는지를 확인함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(Object key, Object value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
'Programming > Java' 카테고리의 다른 글
[Java Swing] 창 크기를 변경해야 이미지가 보일 때 (0) | 2022.12.23 |
---|---|
[Java] 문자열 분리하기 - String 클래스의 split() 메소드 (0) | 2022.06.12 |
[Java] Scanner 클래스의 next(), nextLine() 메소드 차이 (0) | 2022.01.31 |
[Java] 프로그램의 실행 시간 알아내기 : currentTimeMilis() 메소드 (0) | 2022.01.24 |
[Java] 정수의 최소값, 최대값 출력 (0) | 2022.01.24 |