Java HashMap: 효율적인 데이터 저장 및 검색의 열쇠

서론

안녕하세요, 모범적인 Java 프로그래머 여러분! 오늘, 우리는 Java HashMap의 세계로 흥미로운 여정을 떠날 거예요. 이 복잡한 이름에 두려워 마세요. HashMap을 데이터의 슈퍼 스마트 파일 캐비넷으로 생각해요. 그것은 개인 비서처럼 즉시 필요한 모든 정보를 찾을 수 있는 것과 같아요!

Java - HashMap

HashMap에 대해 처음 알았을 때, 저는 그것을 마법의 도서관으로 상상했어요. 책(우리의 데이터)이 책장에서 떠서 손에 들어오는 것처럼, 우리가 요청할 때마다 그렇게 했어요. 그것은 HashMaps가 하지만, 책 대신 컴퓨터 데이터를 사용하는 것이에요. 멋지죠?

이 강력한 Java 클래스의 비밀을 열어보죠!

클래스 선언

Java에서 HashMap 클래스는 이렇게 선언됩니다:

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

와우! 그렇게 길죠? 지금은 알파벳 스oup처럼 보일 수도 있지만, 걱정 마세요. 이렇게 쪼개보죠:

  • public class HashMap<K,V>: 이것은 HashMap이 공개 클래스라는 것을 알려줍니다(누구나 사용할 수 있습니다) 및 키 유형의 K와 값 유형의 V에 두 개의 형식 매개변수를 사용합니다.
  • extends AbstractMap<K,V>: HashMap은 AbstractMap이라는 다른 클래스를 기반으로 합니다.
  • implements Map<K,V>, Cloneable, Serializable: 이 인터페이스들은 HashMap이 구현하여 추가적인 슈퍼 파워를 얻습니다!

매개변수

우리의 마법 도서관 비유를 기억하시나요? 이 도서관에서는 모든 책(값)에 고유한 콜 넘버(키)가 있습니다. HashMap 용어로는:

  • K: 이 맵에서 유지되는 키의 유형
  • V: 매핑된 값의 유형

예를 들어, 사람들의 나이를 저장하고 싶다면, 이름(키)에는 String을 사용하고 나이(값)에는 Integer를 사용할 수 있습니다.

클래스 생성자

HashMap은 네 가지 다른 생성자를 제공합니다. 이들은 우리의 마법 도서관을 다양한 방법으로 구성하는 것과 같습니다:

  1. HashMap(): 기본 용량과 로드 faktor로 빈 HashMap을 만듭니다.
  2. HashMap(int initialCapacity): 지정된 초기 용량과 기본 로드 faktor로 빈 HashMap을 만듭니다.
  3. HashMap(int initialCapacity, float loadFactor): 지정된 초기 용량과 로드 faktor로 빈 HashMap을 만듭니다.
  4. HashMap(Map<? extends K, ? extends V> m): 지정된 Map과 같은 매핑을 가진 새 HashMap을 만듭니다.

용량과 로드 faktor에 대해 너무 걱정하지 마세요. 그것들이 HashMap이 배후에서 얼마나 효율적으로 작동하는지 영향을 준다는 것을 알고 있어야만 합니다.

클래스 메소드

이제 우리의 HashMap이 할 수 있는 멋진 일들을 살펴보죠. 일반적으로 사용되는 몇 가지 메소드를 보여드리겠습니다:

메소드 설명
put(K key, V value) 맵에 키-값 쌍을 추가합니다
get(Object key) 지정된 키와 연관된 값을 검색합니다
remove(Object key) 지정된 키의 매핑을 제거합니다
clear() 맵에서 모든 매핑을 제거합니다
size() 맵에 있는 키-값 매핑의 수를 반환합니다
isEmpty() 맵에 매핑이 없으면 true를 반환합니다
containsKey(Object key) 맵에 지정된 키가 있으면 true를 반환합니다
containsValue(Object value) 맵에 지정된 값이 있으면 true를 반환합니다

상속된 메소드

HashMap은 부모 클래스와 인터페이스에서 메소드를 상속받습니다. 그것은 우리의 마법 도서관이 더 오래된, 더 지혜로운 도서관들에서 몇 가지 트릭을 상속받은 것과 같아요! 여기 몇 가지 예가 있습니다:

  • java.util.AbstractMap에서: equals(), hashCode(), toString()
  • java.util.Map에서: putAll(), entrySet(), keySet(), values()

예제

새로운 지식을 실제로 사용해보는 간단한 예제를 만들어봅시다. 몇몇 유명한 과학자의 나이를 저장할 HashMap을 만듭니다:

import java.util.HashMap;

public class ScientistAges {
public static void main(String[] args) {
// 새 HashMap을 생성합니다
HashMap<String, Integer> scientistAges = new HashMap<>();

// 몇 가지 키-값 쌍을 추가합니다
scientistAges.put("Albert Einstein", 76);
scientistAges.put("Isaac Newton", 84);
scientistAges.put("Marie Curie", 66);

// 값을 검색하고 인쇄합니다
System.out.println("Albert Einstein의 나이: " + scientistAges.get("Albert Einstein"));

// 키가 있는지 확인합니다
if (scientistAges.containsKey("Stephen Hawking")) {
System.out.println("우리는 Stephen Hawking의 나이를 가지고 있습니다.");
} else {
System.out.println("우리는 Stephen Hawking의 나이를 가지고 있지 않습니다.");
}

// HashMap의 크기를 인쇄합니다
System.out.println("과학자의 수: " + scientistAges.size());

// 키-값 쌍을 제거합니다
scientistAges.remove("Isaac Newton");

// 모든 키-값 쌍을 인쇄합니다
for (String name : scientistAges.keySet()) {
System.out.println(name + "는 " + scientistAges.get(name) + " 세에 살았습니다.");
}
}
}

출력

이 코드를 실행하면 다음과 같은 출력이 나올 것입니다:

Albert Einstein의 나이: 76
우리는 Stephen Hawking의 나이를 가지고 있지 않습니다.
과학자의 수: 3
Albert Einstein는 76 세에 살았습니다.
Marie Curie는 66 세에 살았습니다.

이제 무엇이 발생했는지 분석해보죠:

  1. 우리는 scientistAges라는 새 HashMap을 생성했습니다.
  2. 우리는 세 개의 키-값 쌍을 추가했습니다: 과학자의 이름과 나이.
  3. 우리는 get() 메소드를 사용하여 Einstein의 나이를 검색했습니다.
  4. 우리는 containsKey()를 사용하여 Hawking의 나이가 있는지 확인했습니다. 없으므로 "없음" 메시지를 인쇄했습니다.
  5. 우리는 size()를 사용하여 맵의 과학자 수를 인쇄했습니다.
  6. 우리는 remove()를 사용하여 Newton을 맵에서 제거했습니다.
  7. 마지막으로, 우리는 모든 남은 키-값 쌍을 반복하고 인쇄하기 위해 for-each 루프를 사용했습니다.

그리고 그렇게 됐습니다! 여러분은 Java HashMaps의 세계로 첫 걸음을 내딛었습니다. 기억해요, 연습이 만든다. 다양한 유형의 데이터를 저장할 HashMaps를 만들어 보세요. 아마도 자신의 책과 저자, 또는 친구들과 전화 번호를 맵으로 만들 수 있을 거예요.

HashMaps는 실제 프로그래밍에서 매우 유용합니다. 그들은 데이터 구조의 스위스 Amy 톱니칼과 같아요 - 다양하고 효율적이며 항상 유용합니다. 탐험을 계속하고, 코딩을 계속하며, 매우 잘 알아보면 HashMap 마스터가 될 거예요!

Credits: Image by storyset