서론
오늘은 자바 프로그래밍을 하면서 유용하게 쓰이는 util 클래스 중 하나인 HashMap에 관해 정리하는 시간을 갖겠습니다.
본론
정의
먼저, Map은 key와 value로 구성된 객체를 저장하는 자료구조입니다. key와 value는 모두 객체이며, value는 중복될 수 있지만 key 값은 중복될 수 없습니다. 식별자로 유일한 key를 갖으므로 O(1)의 탐색시간을 특성을 갖고 있습니다. HashMap은 이러한 Map의 인터페이스를 구현한 대표적인 Map 컬렉션입니다. 차이점은 Map의 key 값을 저장할 때 Hashing(해싱)을 사용하여 많은 양의 데이터를 검색할 때 빠른 속도로 탐색할 수 있도록 돕는다는 점입니다.
선언방법
HashMap은 아래와 같이 선언할 수 있습니다. 첫번째 제너릭 인자로는 key 타입이 오고, 두번째 인자로는 value의 타입이 오면 됩니다.
// general
HashMap<K, V> numbers = new HashMap<>();
// exmaples
HashMap<Integer, String> numbers = new HashMap<>(10); // key 타입으로 Integer, value 타입으로 String이 오며 초기 용량을 10으로 설정합니다.
생성 : put(K key, V value)
put(key, value) 메서드를 사용합니다. 위에 선언한 형태 그대로 사용하겠습니다. 만약 중복된 key 값으로 데이터를 생성하면 기존 value 값을 반환됨과 동시에 기존 value 값은 대체(!)됩니다. 존재하지 않으면, null을 반환합니다.
numbers.put(1, "1234");
numbers.put(2, "1231");
numbers.put(3, "1232");
numbers.put(4, "1238");
조회 : get(K key), values()
하나의 값을 조회하려면 get 메서드, 전체를 조회하려면 values 메서드를 쓰면 됩니다. 전자는 value를, 후자는 value 타입의 Array를 반환해줍니다.
System.out.println(numbers.get(1)); // 1234
System.out.println(numbers.get(2)); // 1231
System.out.println(numbers.get(3)); // 1232
System.out.println(numbers.get(4)); // 1237
System.out.println(numbers.values()); // [1234, 1231, 1232, 1237]
삭제 : remove(K key, (V value)), clear()
remove(K key, (V value)) 메서드를 사용합니다. 삭제가 성공하면 true
를 반환합니다. 또 전체 삭제하려면 clear 메서드를 사용해주면 됩니다.
numbers.remove(1);
numbers.remove(2);
numbers.remove(3, "1234"); // key의 value 값이 인자로 입력된 값과 다르면, 삭제되지 않습니다. value가 중복일 때 유용하게 사용할 수 있겠죠?
numbers.remove(4, "1238");
numbers.clear();
수정 : replace(K key, (V oldValue), V newValue), replaceAll(Bifunction<K, V> function)
하나의 값을 바꿀 땐, replace. 전체를 변경할 때는 replaceAll 메서드를 사용합니다. JDK 8 버젼부터 사용되는 기능이며, 특이한 점은 함수를 인자로 전달해줍니다. 자바스크립트의 콜백함수처럼 말이죠. 그리고 전달된 함수의 return 값이 그대로 반환됩니다.
numbers.replace(1, "one two three four");
numbers.replace(2, "one two three one");
numbers.replace(3, "one two three two");
numbers.replace(4, "one two three eight");
System.out.println(numbers.values()); // [one two three four, one two three one, one two three two, one two three eight]
numbers.replaceAll((k, v) -> v.toUpperCase());
System.out.println(numbers.values()); // [ONE TWO THREE FOUR, ONE TWO THREE ONE, ONE TWO THREE TWO, ONE TWO THREE EIGHT]
마무리
이상으로 HashMap에서 자주 쓰이는 메서드들을 간단하게 정리해보았습니다. 읽어주셔서 감사합니다.
참고한 포스트
https://www.programiz.com/java-programming/hashmap
https://coding-factory.tistory.com/556
'Language > Java & Kotlin' 카테고리의 다른 글
[Java] 동기화란 무엇인가? (1) 상호배제 (0) | 2023.10.03 |
---|---|
[Java] JVM의 동작 원리 (부제 : Java를 처음 공부하는 당신에게) (0) | 2023.09.22 |
[Java] IntelliJ에서 Junit으로 테스트 환경을 구축하는 방법 (0) | 2023.06.22 |
[Java] 객체 생성 패턴이란? (빌더패턴, 자바빈패턴, 점층적 생성자 패턴) (0) | 2023.06.21 |
[Java] JDK, JRE, JVM (0) | 2022.05.22 |
댓글