[Java] map 메서드

hyun0·2024년 12월 5일

자료구조

목록 보기
4/4

HashMap을 통해 메서드들을 살펴보자

  • Map은 키와 값으로 구성

    • 키와 값은 모두 Object
    • 기존에 저장된 키와 동일한 키로 값을 저장 -> 기존의 값은 없어지고 새로운 값으로 대치
  • Entry 객체를 저장하는 구조

선언

HashMap<> map = new HashMap<>(); //type없음, Object 입력
HashMap<Integer, Integer> map1 = new HashMap<>(); //type 설정
HashMap<Integer, Integer> map2 = new HashMap<>(map1); //map1의 모든 값 복사
HashMap<Integer, Integer> map3 = new HashMap<>(10); //초기용량 지정
HashMap<Integer, Integer> map4 = new HashMap<>(10, 0.7f); //초기 capacity,load factor지정
														  //default capacity=16, load factor=0.75f

HashMap은 load factor가 임계치에 다다르면
hash Table은 rehash하게 되고 bucket 수를 2배 증가시킨다.
즉, 16이였던 bucket 수가 32로 증가한다.
쓸모없이 bucket 를 처음부터 많이 만들어 메모리를 낭비할 필요도 없이
bucket 수를 적게 가지고 시작하더라도 서서히 늘릴수 있다는 장점을 가지고 있다. (dynamic)
그러나 List처럼 공간을 한 칸씩 늘리지 않고 약 두배로 늘리기 때문에 과부하가 발생할 수 있다.

추가

  • V put(K key, V value)
    • 중복 key 입력 시 value 업데이트
  • V putIfAbsent(K key, V value)
    • 중복 key 입력 시 value 업데이트 안함, 원래 value 반환
  • void putAll(Map m)
    • A.putAll(B): 맵 A에 맵 B의 entry들을 전부 저장

삭제

  • V remove(Object key)
    • key 삭제, 매핑된 value 반환 (key없으면 null 반환)
  • boolean remove(Object key, Object value)
    • key, value쌍이 존재하면 삭제-true, 존재하지 않으면-false
  • void clear()
    • 모든 쌍 삭제

접근

  • V get(Object key)
    • value 반환
  • Object getOrDefalt(Object key, Object defalutValue)
    • value 반환, key없으면 defaultValue 반환
  • Set keySet()
    • 저장된 key들을 Set 인터페이스로 반환
  • Collection values()
    • 저장된 value들만 Collection 인터페이스로 반환
  • Set<Map.Entry<K,V>> entrySet()
    • key, value 값을 Entry(key,value의 결합)의 형태로 Set에 저장하여 반환
    • getKey(), getValue()로 접근
  • Iterator
// entrySet()
for(Map.Entry<String, Object> entry : map.entrySet()){
    System.out.println("key : " + entry.getKey() + " " + "value : " + entry.getValue());
}

// keySet()
for(String mapKey : map.keySet()){
    System.out.println("key : " + mapKey + " " + "value : " + map.get(mapKey));
}
  
// entrySet().iterator()
Iterator<Map.Entry<String, Object>> entryIterator = map.entrySet().iterator();
while (entryIterator.hasNext()) {
  Map.Entry<String, Object> entry = (Map.Entry<String, Object>) entryIterator.next();
  String key = entry.getKey();
  String value = entry.getValue();
  System.out.println("key:" + key + " " + " value:" + value);
}
    
// keySet().iterator()
Iterator<String> keyIterator = map.keySet().iterator();
while (keyIterator.hasNext()) {
    String key = keyIterator.next();
    String value = map.get(key);
    System.out.println("key :" + key + " " + " value:" + value);
}

포함

  • boolean containsKey(Object key)
    • key 존재-true, 없음-false
  • boolean containsValue(Object Value)
    • value 존재-true, 없음-false

대체

  • Object replace(Object key, Object value)
    • key의 기존 value를 대입한 value로 대체
  • boolean replace(Object key,
    Object oldValue, Object newValue)
    • key, oldValue가 모두 일치하는 경우, 새로운 newValue로 대체

크기

  • int size()
    • 저장된 Entry 개수 반환

복사

  • Object clone()
    • 현재 map을 복제하여 반환
    • 얕은 복사
  • void putAll(Map m)
    • 얕은 복사
  • 반복문으로 요소 1개씩 put
    • 깊은 복사

참조

profile
聽卽振, 視卽記, 爲卽覺

0개의 댓글