1. Map인터페이스란?
- Map인터페이스는 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용됩니다.
키는 중복될 수 없지만 값은 중복을 허용합니다. 왜냐하면 값을 추출하기 위해서는 key객체에 대응하는 value객체를 반환하는데
중복된 key객체가 있을 경우 어떠한 key객체를 찾아야하는지 모르기 때문입니다.
- 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 됩니다.
다음은 Map인터페이스의 상속계층도입니다.
<사진 1.1> Map인터페이스의 상속계층도
2. HashMap컬렉션 클래스
- HashMap<K,V>컬렉션은 java.util패키지에 속한 컬렉션 클래스이다. HashMap은 내부에 '키'와 '값'을 저장하는 자료 구조를 가지고,
다음과 같이 put()메서드와 get()메서드를 이용하여 요소를 삽입하거나 검색합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
package com.edu.test;
import java.util.*;
public class test {
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("apple", "사과");
hm.put("banana", "바나나");
System.out.println(hm.get("apple"));
System.out.println(hm.get("banana"));
}
} |
cs |
<사진 1.2> HashMap컬렉션 클래스의 put(), get()메서드 사용 방법
- 8~9번째 코드가 실행되고 나면 HashMap에서는 아래와 같은 형태로 데이터가 저장됩니다.
<사진 1.2 코드 표>
- put(key, value)메서드를 사용하여 "appple"이라는 이름을 갖는 key와 "사과"라는 이름을 갖는 value를 저장합니다.
그리고 get(key)메서드를 사용하여 key에 대응하는 value 값을 반환합니다. 만약 해시맵에 없는 '키'로 get()을 호출하면 null값을 리턴합니다.
다음은 결과 화면입니다.
1
2
3 |
hm.put("a","1");
hm.put("b","2");
hm.put("b","3"); |
cs |
- 만약 위와 같은 코드가 실행되고 나면 HashMap에는 아래와 같은 형태로 데이터가 저장됩니다.
- 3개의 데이터 쌍을 저장했지만 실제로는 2개 밖에 저장되지 않은 이유는 중복된 키가 있기 때문입니다. 세 번째로 저장한 데이터의 키인
'b'는 이미 존재하기 때문에 새로 추가되는 대신 기존의 값을 덮어씁니다. 그래서 키 'b'에 연결된 값은 '3'이 됩니다.
<사진 1.2 결과 화면>
2-1 HashMap의 장단점
장점 :
1) 요소의 삽입, 삭제 시간이 매우 빠릅니다. 요소의 위치를결정하는 해시 함수가 간단한 코드로 이루어지며, Vector나 ArrayList 컬렉션 클래스처럼
요소의 삽입 삭제 시 다른 요소들의 위치 이동이 필요 없기 때문입니다.
2) 요소 검색은 더욱 빠릅니다. HashMap의 get(key)메서드가 호출되면 해시 함수가 ket가 저장된 위치를 단번에 찾아내므로,
Vector나 ArrayList 컬렉션 클래스처럼 모든 요소들을 하나씩 비교하는 시간 낭비가 전혀 없기 때문이다.
단점 :
1) HashMap은 인덱스를 이용하여 요소에 접근할 수 없고 오직 '키'로만 검색해야 합니다. 그러므로 HashMap은 빠른 삽입과 검색이
필요한 응용에 적합합니다.
2-2 HashMap 생성
- HashMap<K, V>에서 K는 '키'로 V에는 '값'으로 사용할 구체적인 타입을 지정하여 사용합니다. 다음은 키와 값을 모두 String 타입으로 지정한
코드입니다.
1 |
HashMap<String, String> hm = new HashMap<String, String>(); |
cs |
<사진 1.3> HashMap 생성
2-3 HashMap 주요 메서드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
package com.edu.test;
import java.util.*;
public class test {
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("apple", "사과"); // "apple"은 키, "사과"는 값
hm.put("banana", "바나나");
hm.put("grape", "포도");
System.out.println("첫 번째 요소 :"+hm.get("apple")); // "apple"키에 대응하는 값을 반환
System.out.println("두 번째 요소 :"+hm.get("banana"));
System.out.println("hm 내에 있는 요소의 개수 :"+hm.size()); // 현재 hm 내에 있는 요소의 개수 리턴
hm.remove("apple"); // "apple"키를 갖는 키와 값을 삭제
System.out.println("첫 번째 요소를 삭제한 결과:"+hm.get("apple"));
}
} |
cs |
<사진 1.4> HashMap컬렉션 클래스 주요 메서드
- 요소 삽입, 추출, 크기 확인, 삭제의 기능을 가진 메서드입니다. 다음은 결과 화면입니다.
<사진 1.4 결과 화면>
'언어 > JAVA' 카테고리의 다른 글
[Java] 클래스 / 인스턴스 / 지역변수 쉽게 이해하기 (0) | 2019.11.26 |
---|---|
[Java] 스캐너(Scanner)클래스 사용 방법 (0) | 2019.11.26 |
[JAVA] Enumeration, Iterator, ListIterator 인터페이스 사용 방법 (0) | 2018.03.22 |
[JAVA] Vector 클래스 사용 방법 (0) | 2018.03.21 |
[JAVA] ArrayList클래스 사용 방법 (0) | 2018.03.01 |