Java HashMap: 효율적인 데이터 저장 및 검색의 열쇠
서론
안녕하세요, 모범적인 Java 프로그래머 여러분! 오늘, 우리는 Java HashMap의 세계로 흥미로운 여정을 떠날 거예요. 이 복잡한 이름에 두려워 마세요. 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은 네 가지 다른 생성자를 제공합니다. 이들은 우리의 마법 도서관을 다양한 방법으로 구성하는 것과 같습니다:
-
HashMap()
: 기본 용량과 로드 faktor로 빈 HashMap을 만듭니다. -
HashMap(int initialCapacity)
: 지정된 초기 용량과 기본 로드 faktor로 빈 HashMap을 만듭니다. -
HashMap(int initialCapacity, float loadFactor)
: 지정된 초기 용량과 로드 faktor로 빈 HashMap을 만듭니다. -
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 세에 살았습니다.
이제 무엇이 발생했는지 분석해보죠:
- 우리는
scientistAges
라는 새 HashMap을 생성했습니다. - 우리는 세 개의 키-값 쌍을 추가했습니다: 과학자의 이름과 나이.
- 우리는
get()
메소드를 사용하여 Einstein의 나이를 검색했습니다. - 우리는
containsKey()
를 사용하여 Hawking의 나이가 있는지 확인했습니다. 없으므로 "없음" 메시지를 인쇄했습니다. - 우리는
size()
를 사용하여 맵의 과학자 수를 인쇄했습니다. - 우리는
remove()
를 사용하여 Newton을 맵에서 제거했습니다. - 마지막으로, 우리는 모든 남은 키-값 쌍을 반복하고 인쇄하기 위해 for-each 루프를 사용했습니다.
그리고 그렇게 됐습니다! 여러분은 Java HashMaps의 세계로 첫 걸음을 내딛었습니다. 기억해요, 연습이 만든다. 다양한 유형의 데이터를 저장할 HashMaps를 만들어 보세요. 아마도 자신의 책과 저자, 또는 친구들과 전화 번호를 맵으로 만들 수 있을 거예요.
HashMaps는 실제 프로그래밍에서 매우 유용합니다. 그들은 데이터 구조의 스위스 Amy 톱니칼과 같아요 - 다양하고 효율적이며 항상 유용합니다. 탐험을 계속하고, 코딩을 계속하며, 매우 잘 알아보면 HashMap 마스터가 될 거예요!
Credits: Image by storyset