HashMap과 TreeMap

kayla·2024년 11월 25일
0

HashMap의 key와 value

  • key, value 모두 어떤 Object도 저장 가능
  • key는 유일
  • 순서X

장점

해싱을 사용하기 때문에 데이터를 검색, 삽입, 삭제하는데 O(1)의 시간이 걸린다.

함수

  • HashMap 생성
HashMap<K, V> map = new HashMap<K, V>();

// 초기 용량을 지정하여 해시맵 생성
HashMap<K, V> map = new HashMap<K, V>(int initialCapacity);

// 초기 용량과 로드 팩터를 지정하여 해시맵 생성
HashMap<K, V> map = new HashMap<K, V>(int initialCapacity, float loadFactor);

// 다른 맵의 내용을 복사하여 생성
HashMap<K, V> map2 = new HashMap<K, V>(map1);
  • HashMap 주요 메서드

  • 키와 값을 추가하거나 업데이트
    map.put(K key, V value);

  • 키를 기준으로 값 가져오기
    V value = map.get(K key); (못 찾으면 null)
    V value = map.getOrDefault(K key, Object defaultValue);

  • 특정 키가 존재하는지 확인
    boolean exists = map.containsKey(K key);

  • 특정 값이 존재하는지 확인
    boolean exists = map.containsValue(V value);

  • 특정 키-값 쌍 삭제
    V removedValue = map.remove(K key);

  • value 대체
    V replace(K key, V value);

  • value까지 확인 후 newValue로 대체
    boolean replace(K key, V oldValue, V newValue);

  • 해시맵의 모든 요소를 삭제
    map.clear();

  • 복제
    Object clone()

  • Map의 모든 요소를 HashMap에 저장
    void putAll(map M)

  • 해시맵의 크기 가져오기
    int size = map.size();

  • 해시맵이 비어 있는지 확인
    boolean isEmpty = map.isEmpty();

  • 모든 키를 Set으로 가져오기
    Set<K> keys = map.keySet();

  • 모든 값을 Collection으로 가져오기
    Collection<V> values = map.values();

  • 모든 키-값 쌍을 Set으로 가져오기
    Set<Map.Entry<K, V>> entries = map.entrySet();

  • 모든 값 출력(4가지 방법)

// 1. 간단한 출력
for (Integer value : map.values()) {
    System.out.println(value);
}

// 2. 모든 값 출력(entrySet()과 Map.Entry를 사용)
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getValue());
}

// 3. 모든 값 출력(forEach() 메서드를 이용한 람다 표현식)
map.forEach((key, value) -> System.out.println(value));

// 4. Iterator로 값 출력
Iterator<Integer> iterator = map.values().iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
  • 같은 키를 2번 put하면 value가 새로운 값으로 대체됨.

  • 특정 리스트의 값을 값과 값의 개수 형태로 저장

// 리스트 생성
List<String> list = List.of("Apple", "Banana", "Apple", "Cherry", "Banana", "Apple");

// HashMap 생성
HashMap<String, Integer> map = new HashMap<>();

// 리스트의 값을 해시맵에 저장
for (String value : list) {
    map.put(value, map.getOrDefault(value, 0) + 1);
}

// 출력
System.out.println("결과: " + map);

정렬 방법?

그 자체로는 순서가 없어서 정렬이 안됨.
만약 키 정렬을 하고 싶다면 TreeMap을 사용하면 되고,
값 정렬을 하고 싶다면 아래의 방법으로 값만 뽑아내서 값 배열만 정렬이 가능.. 엄밀히 말하면 키-값으론 정렬이 어려워서 List<Map.Entry<K, V>>로 바꿔야 함

List<Integer> counts = new ArrayList<>(map.values());
counts.sort(Collections.reverseOrder());

TreeMap

  • 정렬된 상태로 데이터를 관리
  • 레드-블랙 트리를 사용
profile
Java 코딩테스트 준비하면서 공부한 내용 올립니다 :D

0개의 댓글

관련 채용 정보