[Java] HashMap 개념 및 메서드
HashMap의 정의
HashMap은 Map을 구현한 대표적인 클래스이다. HashTable보다 상위 버전이므로, HashTable보다 HashMap을 쓰는 것이더 권장되니 알아두자.
HashMap의 특징
1. HashMap은 Map의 특징, 키(key)와 값(value)를 하나로 묶어 하나의 데이터로 저장한다는 특징이 있다. 또한 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데에 있어 강점이 있다.
2. HashMap은 키, 값을 각각 Object 타입으로 저장하므로, 어떤 객체든 저장할 수 있다. 하지만 주로, 키는 String 형으로 통일해서 사용한다.
3. key는 중복을 허용하지 않지만, value는 중복을 허용한다. 만약 똑같은 키에 추가로 값이 입력되면, 기존의 키와 값은 덮어쓰기 된다.
키는 저장된 값을 찾는 데 사용되는 열쇠같은 것이다. 따라서 유일해야 하므로 중복이 허용되지 않으니 참고하자.
4. 순서를 유지하지 않는다. 순서를 유지하려면 LinkedHashMap을 써야 한다.
HashMap의 주요 메서드
put() | 키, 값 저장 |
get() | 키로 값 찾기 |
entrySet() | 키 값 쌍을 set으로 가져오기 |
keySet() | 키만 set으로 져오기 |
getOrDefault() | 키로 값 찾기. 지정된 키가 없으면 특정 값 반환 |
ContainsKey | Key를 가지고 있는지 체크 |
ContainsValue | 값을 가지고 있는지 체크 |
remove | 삭제 |
코드 예제
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("key1", "1234"); // 값 저장
hashMap.put("key2", "5678"); // 값 저장
System.out.println("hashMap: " + hashMap);
hashMap.put("key1", "덮어쓰기"); // 똑같은 key -> 덮어쓰기
System.out.println("hashMap: " + hashMap);
System.out.println(hashMap.get("key1"));
// entrySet
Set entrySet = hashMap.entrySet();
System.out.println("entrySet = " + entrySet);
// keySet
Set keySet = hashMap.keySet();
System.out.println("keySet = " + keySet);
}
}
HashMap의 키 값 저장
hashMap에 저장되는 key와 value는 실제로 어디에 저장되는지 알아보자.
HashMap에는 Entry[]라는 Entry 배열이 존재한다. 내부 클래스 Entry의 멤버변수로 key, value가 저장되는데, key와 value는 서로 관련된 값이기 때문에 하나의 클래스로 정의해 묶어 관리하게 되는 것이다.
HashMap 실습해보기
public class HashMapEx2 {
static HashMap phoneBook = new HashMap();
public static void main(String[] args) {
addPhoneNo("친구", "김김김", "010-1111-1111");
addPhoneNo("친구", "이이이", "010-2222-2222");
addPhoneNo("친구", "최최최", "010-3333-3333");
addPhoneNo("가족", "박박박", "010-4444-4444");
addPhoneNo("가족", "효효효", "010-5555-5555");
printList();
}// main
// 그룹에 전화번호를 추가하는 메서드
static void addPhoneNo(String groupName, String name, String tel) {
addGroup(groupName);
HashMap group = (HashMap) phoneBook.get(groupName);
group.put(tel, name);
}
// 그룹 추가 메서드
static void addGroup(String groupName) {
if (!phoneBook.containsKey(groupName)) {
phoneBook.put(groupName, new HashMap());
}
}
// 전화번호부 전체 출력 메서드
static void printList() {
Set set = phoneBook.entrySet(); //phoneBook
Iterator iterator = set.iterator(); //collection의 요소를 참조하기 위한 iterator
while (iterator.hasNext()) {
Map.Entry e = (Map.Entry) iterator.next();
Set entrySet = ((HashMap) e.getValue()).entrySet(); //group
Iterator groupIterator = entrySet.iterator();
System.out.println(e.getKey() + " [" + entrySet.size() + "] ");
while (groupIterator.hasNext()) {
Map.Entry e2 = (Map.Entry)groupIterator.next();
System.out.println("이름: " + e2.getValue() + " 번호: " + e2.getKey());
}
}
}
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 열거형(enums)이란? (0) | 2022.07.02 |
---|---|
[Java] 자바 제네릭스는 무엇이고 어떻게 동작하는가? (0) | 2022.07.01 |
[Java] time 패키지 (LocalDate, LocalTime) (0) | 2022.06.29 |
[Java] String 클래스 정확히 이해하기 (0) | 2022.06.28 |
[Java] equals와 == 정확히 이해하기 (0) | 2022.06.28 |