공부의 정리 및 복습을 위한 기록입니다.
HashMap에 대한 자료구조와 JAVA에서 지원하는 Map 인터페이스의 구현 클래스 중 가장 많이 사용하는 HashMap에 대한 내용 및 메서드를 정리하려고한다.
우선 HashMap이란 Key와 Value를 쌍으로 저장하는 구조의 저장 방식이다.
Key값은 중복이 될 수 없으며 Key값을 Hash함수를 통하여 HashCode로 바꾸어 저장되며 이 HashCode는 Index역할을 한다.
Key값은 중복이 허용 되지 않지만 Key값을 Hashcode로 변환하는 Hashing 도중 동일한 해시코드를 갖게되는 경우를 해싱충돌 (Hashing Collision)이라고 한다.
이 해싱충돌을 방지 및 해결하기 위해서 체이닝, 개방 주소법, 재해싱, 버킷 확장 등의 방법등이 있다.
이러한 해싱과 충돌에 대하여는 Hash의 자료구조를 정리 하면서 더 자세하게 정리 하도록 하겠다.
이제 JAVA에서 지원하는 Map 인터페이스의 구현 클래스인 Hashmap의 메서드 및 사용 방법을 정리하려고 한다.
우선 아래는 Hashmap의 대표적인 메서드이다.
| 기능 | 메서드 | 설명 |
|---|---|---|
| 객체 추가 | put(K, V) | 주어진 K로 V를 저장, K가 이미 있는경우 V를 덮어쓴다. |
| 객체 검색 | contaninsKey(K) | 주어진 K가 있는지 여부를 확인 |
| contaninsValue(V) | 주어진 V가 있는지 여부를확인 | |
| Set<Map.Entry<K,V>> entrySet | K와 V의 쌍으로 구성된 모든 Entry 객체를 Set에 담아서 반환 | |
| get(K) | 주어진 K에 있는 V를 반환 | |
| isEmpty() | 객체가 비어 있는지 여부를 반환 | |
| Keyset() | 객체의 K를 모두 반환 | |
| size() | 저장된 총 객체수를 반환 | |
| 객체 삭제 | remove(K) | 해당 K의 K와 V를 모두 삭제 |
| clear() | 저장된 모든 객체를 삭제 |
위와 같은 대표적인 메서드들이 있으며 아래 예제 코드를 보며
사용 메서드 사용 방법을 익혀 보도록 하겠다.
우선 Hashmap의 선언 방식이다.
HashMap<String,Integer> map1 = new HashMap<>();//HashMap생성
HashMap<String,Integer> map2 = new HashMap<>(map1);//map1의 모든 값을 가진 HashMap생성
HashMap<String,Integer> map3 = new HashMap<>(10);//초기 용량지정
위와 같이 생성과 복사, 초기 용량을 지정하여 생성할 수 있다.
HashMap<String,Integer> map = new HashMap<>();//HashMap생성
if (map.isEmpty()) {
map.put("임팔라", 10);
}
map.put("홍길동", 15);
map.put("전우치", 20);
map.put("이순신", 25);
System.out.println(map); // map의 모든 K, V 출력
System.out.println(map.get("임팔라")); // map의 "임팔라" 라는 K의 V 출력
System.out.println(map.keySet()); // map의 K 모아서 출력
System.out.println(map.values()); //map의 V 모아서 출력
System.out.println(map.size());//map의 객체수 출력
for (int i : map.values()) {
System.out.println(i);
} //for문 이용한 V만 하나씩 가져오기
for (String s : map.keySet()) {
System.out.println(s);
} //for문 이용한 K만 하나씩 가져오기
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
} // Entry이용 해서 K와 V 하나씩 가져오기
}
}
출력 :
{홍길동=15, 임팔라=10, 전우치=20, 이순신=25}
10
[홍길동, 임팔라, 전우치, 이순신]
[15, 10, 20, 25]
4
15
10
20
25
홍길동
임팔라
전우치
이순신
홍길동 15
임팔라 10
전우치 20
이순신 25
위 코드와 같이 생성과 객체 추가 및 객체의 내용을 가져오고 출력할 수 있다.
다음에는 Hash에 대한 자료구조와 Hashing등 조금 더 자세한 내용을 공부하고 정리 해보도록 하겠다.
공부하며 정리와 복습을 위해 저장한 기록입니다. 틀린 부분 및 개선할 부분이 있다면 알려주시면 감사하겠습니다 !