Today Yewon Learned

[JAVA] HashMap 본문

JAVA

[JAVA] HashMap

데브워니 2021. 11. 10. 10:34
pokedex.put("피카츄", new Pokemon("라이츄"));

1. HashMap

- HashMap은 'value(원소)'와, 그 원소를 가리키는 'key' 값을 같이 저장

- 순서만 있는 ArrayList와 달리, key와 value가 쌍을 이룸

- List처럼 뭉텅이로 저장하지않고, Map에 아이템을 저장할 때 마다 빈공간을 찾아 저장

- 따라서 List보다 데이터 저장 속도가 느림

 

2. HashMap 생성

- HashMap는 java.util.HashMap에 포함되어 있으므로 먼저 java.util.HashMap import를 진행

import java.util.HashMap;
HashMap<String, Pokemon> pokedex = new HashMap<>();

 

 

3. Key-Value 쌍 추가

- HashMap에 쌍을 추가할 때는 put 메소드를 사용

- 첫 번째 파라미터로 key를 넘겨주고, 두 번째 파라미터로 value를 넘김

pokedex.put("피카츄", new Pokemon("피카츄"));
pokedex.put("파이리", new Pokemon("파이리"));
pokedex.put("이상해씨", new Pokemon("이상해씨"));
pokedex.put("이상해풀", new Pokemon("이상해풀"));
pokedex.put("이상해꽃", new Pokemon("이상해꽃"));

 

 

4. 값 꺼내기

- 원소를 꺼낼 때는 get 메소드를 사용

- 찾고자 하는 value에 해당하는 key를 파라미터로 넘김

Pokemon pikachu = pokedex.get("피카츄");

 

 

5. 값 덮어쓰기

- 같은 key에 여러 value를 저장하면 가장 마지막에 저장된 value로 덮어 씌워짐

pokedex.put("피카츄", new Pokemon("라이츄"));

 

 

6. 반복문을 통해 HashMap 탐색하기

- HashMap의 keyset메소드는 모든 key를 담고 있는 Set을 리턴해줌

- Set은 List나 Map과 같이 원소를 담고 있는 자료형 중 하나이며 'for each'문으로 탐색이 가능

for (String key : pokedex.keySet()) {
    System.out.println(pokedex.get(key));
}

 

 

7. HashMap의 동작 원리

HashMap의 key는 'hashcode'라는 것으로 관리됩니다. 이 hashcode는 모든 클래스의 인스턴스가 가진 고유한 값인데, 인스턴스마다 다르기 때문에 HashMap이 key를 구분하는 값으로 사용됩니다(여러 인스턴스가 같은 hashcode를 가질 수 있으며, 이 경우 HashMap에선 key.equals(anotherKey) 메소드로 구분합니다).

 

일반적인 클래스는 인스턴스 생성시 hashcode 값이 결정됩니다. 즉, 같은 정보를 담고 있는 두 인스턴스가 서로 다른 hashcode를 가질 수 있다는 말입니다.

 

그런데 String은 서로 다른 인스턴스라도 안의 내용이 같으면 같은 hashcode를 갖습니다. 그렇기 때문에 HashMap의 key로서 String이 매우 적합합니다. Key는 실제 인스턴스보다는 안에 담긴 의미, 내용으로 구분하는 것이 좋기 때문입니다.

'JAVA' 카테고리의 다른 글

[JAVA] Generic(제네릭)  (0) 2021.11.15
[JAVA] Casting(캐스팅 : 형변환)  (0) 2021.11.12
[JAVA] 상속  (0) 2021.11.11
[JAVA] Setter 메소드와 Getter 메소드  (0) 2021.11.10
[JAVA] ArrayList  (0) 2021.11.10
Comments