java

해시(Hash)

주다애 2023. 11. 26. 18:39

🎈 Hash

💡 key : value로 이루어진 자료구조

 

모든 데이터 타입으로 접근이 가능하다. → 배열보다 편리하다.

자바에서는 주로 HashMap 자료구조를 사용한다.

Map 인터페이스를 구현한 Map Collections 중 하나로 Map 인터페이스를 상속하고 있어서 Map이 성질을 그대로 가지고 있다.

Key는 중복을 허용하지 않지만 Value는 중복이 허용된다.

 

import java.util.HashMap;

// Key가 String이고 Value가 Integer 타입의 Entry를 가지는 HashMap 선언
HashMap<String, Integer> map = new HashMap<>();

// 삽입 --> map.put(Key값, Value값)
map.put("apple", 1);
map.put("melon", 2);

// 삭제 --> map.remove(Key값)
map.remove("apple");
map.clear(); --> 모든 값 제거

// 출력 --> map.get(Key값)
map.get("apple");
// 1. Key값 가져오기 --> keySet()
for(String k : map.keySet()) {
	System.out.println(k);
} // "apple", "melon"

// 2. Value값 가져오기 --> values()
Collections<Integer> values = map.values(); // [10, 2]

// 3. Key : Value값 가져오기 --> entrySet() (빠름)
for(Map.Entry<String, Integer> entry : map.entrySet()) {
	System.out.println(entry.getKey() + " : " + entry.getValue());
} // apple : 1, melon : 2

// 4. Key : Value값 가져오기 --> forEach() Java 8 버전 이후부터 가능
map.forEach((k, v) -> {
		System.out.println(k + " : " + v)
}); // apple : 1, melon : 2
// map에 apple이라는 key가 있으면 apple의 value를 반환 / 없으면 0 반환
getOrDefault("apple", 0);

// nums배열의 각 원소가 map에 Key로 있으면 해당 value + 1을 해주고 없으면 0으로 하고 +1
for(Integer num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
}

get(key) 사용 시 key가 존재하지 않으면 null을 반환한다.

    👉 이 때 null 대신 기본 반환 값을 반환하게 해주는 메소드 : getOrDefault()

getOrDefault(Object key, V defaultValue)

    👉 key : 값을 가져와야 하는 요소의 Key 값

    👉 defaultValue : 지정된 key로 매핑된 값이 없을 경우 반환하는 기본 값

// map에 apple이라는 key가 있으면 apple의 value를 반환 / 없으면 0 반환
getOrDefault("apple", 0);

// nums배열의 각 원소가 map에 Key로 있으면 해당 value + 1을 해주고 없으면 0으로 하고 +1
for(Integer num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
}

시간 복잡도

1️⃣ 삽입 : O(1)

2️⃣ 삭제 : O(1)

3️⃣ 탐색 : O(1)

'java' 카테고리의 다른 글

생성자  (0) 2023.12.12
error-Your build is currently configured to use Java 17.0.7 and Gradle 6.8.  (1) 2023.12.05
동일성 vs 동등성  (0) 2023.08.17
stream API + Optional  (0) 2023.07.15
stream API  (0) 2023.07.10