Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- IPv4
- Level2
- 레벨1
- 코딩테스트
- ArrayList
- 클린 아키텍처
- 글쓰기세미나
- 포트포워딩
- Stack
- UserLand
- 소프트웨어 아키텍처
- 글또10기
- StringBuilder
- 포트앤어댑터 아키텍처
- Wanted
- 회고
- 3계층 아키텍처
- React
- 코엑스그랜드볼룸
- comparator
- 헥사고날 아키텍처
- 글또
- IPv6
- HashMap
- 다짐글
- axios
- Fetch
- OpenSearch
- 프로그래머스
- network
Archives
- Today
- Total
깨록
HashMap 사용 방법 본문
HashMap 생성
기본 생성자와 초기 용량 및 부하 계수를 지정하여 생성자를 사용하는 방법을 알아보겠습니다.
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
// 기본 생성자
HashMap<String, Integer> map = new HashMap<>();
// 초기 용량과 부하 계수를 지정하는 생성자
HashMap<String, Integer> mapWithCapacity = new HashMap<>(16, 0.75f);
}
}
값 추가(수정)
put
메서드를 사용해 값을 추가합니다. 이미 존재하는 키에 대해 값을 추가하면 기존 값이 덮어쓰여집니다.
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 값 추가
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
}
}
값 조회
get
메서드를 사용해 값을 조회합니다. 키가 존재하지 않는 경우 'null'을 반환합니다.
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
// 값 조회
Integer value = map.get("apple"); // 1
Integer missingValue = map.get("pear"); // null
}
}
값 삭제
remove
메서드를 사용해 값을 삭제합니다. 키를 전달하면 해당 키-값 쌍이 삭제됩니다.
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
// 값 삭제
map.remove("apple"); // "apple" 키가 제거됨
}
}
존재 여부 확인
containsKey
메서드를 사용해 키의 존재 여부를 확인합니다.
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// 키 존재 여부 확인
if (map.containsKey("apple")) {
System.out.println("Apple exists in the map.");
}
}
}
초기 용량 설정과 부하 계수
- HashMap은 효율적인 키-값 저장을 위해 설계된 데이터 구조입니다. 이때 초기 용량(initial capacity)와 부하 계수(load factor)는 HashMap의 성능과 효율성에 중요한 영향을 미칩니다.
> 초기 용량(Initial Capacity)
- HashMap이 생성될 때 내부적으로 할당 되는 버킷(bucket)의 수를 의미합니다. 설정하는 이유는 다음과 같습니다.
1. 성능 최적화
- 많은 데이터를 저장할 것이 예상되는 경우 초기 용량을 크게 설정하면, 데이터가 추가될 때 HashMap이 자주 리사이징(resizing) 되는 것을 방지할 수 있습니다.
- 리사이징이 발생하면 기존 데이터를 새로운 버킷 배열로 옮기는 작업이 필요하기 때문에 많은 시간과 자원이 소비됩니다. 이러한 리사이징 작업의 빈도를 줄이기 위해 적절한 초기 용량을 설정할 필요가 있습니다.
2. 메모리 사용 효율
- 초기 용량을 너무 크게 설정하면 사용되지 않는 버킷들이 메모리를 차지하기 때문에 예상되는 데이터의 양에 맞춰 설정함이 중요합니다.
> 부하 계수(Load Factor)
- HashMap이 얼마나 가득 찰 수 있는지에 대해 결정하는 기준으로 효율성 최적화에 중요한 역할을 합니다. 기본 부하 계수는 "0.75"입니다.
1. 시간 복잡도 관리
- 부하 계수는 해시 버킷이 얼마나 채워지면 리사이징 할지 결정합니다. 부하 계수가 낮으면 해시 버킷의 충돌이 적어져 "O(1)"의 조회 및 삽입 성능을 유지할 수 있습니다.(다만 너무 낮으면 리사이징 빈도가 높아집니다.)
- 해시 충돌이 많이 발생하면 성능 저하로 이어질 수 있어 충돌을 최소화하도록 부하 계수를 적절히 설정해주어야 합니다.
2. 공간 복잡도 관리
- 부하 계수가 높으면 리사이징 빈도가 줄어들고 메모리 효율성이 높아집니다. 하지만 너무 높으면 해시 충돌이 자주 발생해 성능 저하로 이어지게 됩니다.
반복
- entrySet, keySet, values 메서드를 사용하여 맵의 내용을 반복할 수 있습니다.
entrySet을 사용한 반복
entrySet
메서드는 HashMap의 모든 키-값 쌍을 포함하는Set
을 반환합니다.- 키와 값을 동시에 반복할 때 유용합니다.
import java.util.HashMap; import java.util.Map;
public class HashMapEntrySetExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// entrySet을 사용한 반복
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}
## keySet을 사용한 반복
- `keySet` 메서드는 HashMap의 모든 키를 포함하는 `Set`을 반환합니다.
- 키만 필요하거나 키를 통해 값을 조회하는 경우에 유용합니다.
```java
import java.util.HashMap;
import java.util.Set;
public class HashMapKeySetExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// keySet을 사용한 반복
for (String key : map.keySet()) {
System.out.println("Key: " + key + ", Value: " + map.get(key));
}
}
}
values를 사용한 반복
values
메서드는 HashMap의 모든 값을 포함하는 Collection을 반환합니다.- 값만 필요할 때 유용합니다.
import java.util.Collection; import java.util.HashMap;
public class HashMapValuesExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
// values를 사용한 반복
for (Integer value : map.values()) {
System.out.println("Value: " + value);
}
}
}
```