일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Dependency Injection
- 자바
- properties 변수
- properties 파일 주입
- 자바 List
- DDL TRUNCATE
- 오라클 TRUNCATE
- annotation
- collection framework
- Spring 객체로 주입받기
- JSR - 380
- JSR - 303
- 스프링 파라미터 추출
- properties 파일
- Spring Cookie
- 자바오류
- 오라클 CREATE
- Spring message
- Mybatis 오류
- 코드로 배우는 스프링 웹 프로젝트
- Spring
- Servlet cookie
- Spring 커맨드 객체
- 자바스크립트
- 오라클 DROP
- DDL DROP
- Spring MVC5 기본 세팅
- 스프링 인터셉터
- ddl alter
- Spring MVC Interceptor
- Today
- Total
개발이좋아
[Java] Collection Framework - Map 인터페이스 본문
자료구조를 효율적으로 관리하기 위한 Collection Framework 중 Map인터페이스는 자료를 키(Key)와 값(Value)으로 관리하는데 필요한 메서드가 정의되어 있다.
Key와 Value를 쌍으로 저장하기 때문에 자료검색의 유용한 인터페이스이다.
Key와 Value란 사람을 예로 들자면 아래 표와 같다.
Key | Value |
이름 | 이순신 |
나이 | 25 |
직업 | 개발자 |
Key값은 유일해야 한다. 하지만 Value값은 여러 개 있을 수 있고 또한 중복될 수도 있다.
예를 들어 위 표에서 직업이 여러 개 있는 사람은 Value값이 하나가 아닌 여러 개가 될 것이다.
위 사진은 Map 인터페이슬 구현하고 있거나 상속받은 인터페이스와 클래스들이다.
실선은 상속을 의미하고 점선은 구현을 의미한다.
Map인터페이스를 구현하거나 상속받은 하위 클래스 중 가장 많이 사용되는 클래스는 HashMap이다.
HashMap을 예로 Map인터페이스를 생성하는 법을 설명하자면 아래와 같다.
HashMap<Key, Value> 참조변수명 = new HashMap<Key, Value>( );
Map<Key, Value> 참조변수명 = new HashMap<Key, Value>( );
첫 문장은 바로 HashMap으로 선언한 경우이고 아래는 Map 자료형으로 선언하였지만 HashMap으로 인스턴스를 만든 자동형 변환의 예제이다.
아래의 선언법은 가상 메서드 기법에 의해 같은 이름의 메서드가 Map과 HashMap에 정의되어 있을 때 HashMap 클래스의 메서드를 실행하게 된다.
Map인터페이스에서 자주 사용되는 메서드들은 다음과 같다.
메서드 | 설명 |
V put(K key, V value) | key에 해당하는 value값을 Map에 저장 |
V get(K key) | key에 해당하는 value 값을 반환 |
boolean isEmpty( ) | Map이 비어있는지 여부를 true. false로 반환 |
boolean containsKey(Object key) | Map에 해당 key가 있는지 여부를 true, false로 반환 |
Set keySet( ) | Key 집합을 Set으로 반환 |
Collection values( ) | value를 Collection으로 반환 ( 중복 무관 ) |
boolean containsValue(Object value) | Map에 해당 value가 있는지 true, false로 반환 |
V remove(key) | key가 있는 경우 삭제 |
boolean remove(Object key, Object value) | key가 있는 경우 key에 해당하는 value가 매개변수의 두 번째 인자와 일치할 경우 삭제 |
메서드들을 보면 Map인터페이스는 자료의 검색에 유용한 것을 알 수 있다.
(1) HashMap 클래스
HashMap 클래스는 Map인터페이스를 구현한 클래스 중 가장 많이 사용한다.
HashMap에서 자료를 관리하는 방식은 해시 방식으로 자료를 저장하는 공간을 해시 테이블이라고 한다.
key 값이 정해지면 그 값에 해당하는 위치에 해시 테이블이 저장되고 '해시 함수'를 사용하여 저장된 테이블의 위치를 검색할 수 있다.
key를 알고 있는 상태에서는 value값을 검색하는데 걸리는 시간을 산술적으로 계산할 수 있어서 자료의 추가 속도나 검색 속도가 상당히 빠르다.
Map인터페이스에서 사용하는 Key값은 중복을 허용하지 않는다.
따라서 Map인터페이스를 사용할 시 equals( ) 메서드와 hashCode( ) 메서드를 재정의하는 것이 좋다.
(2) Hashtable
Hashtable은 HashMap과 거의 같다.
자료를 키와 값 쌍으로 관리하는 사용 되며 List 인터페이스에 Vector와 같이 멀티스레드를 위한 동기화를 제공하며,
단일 스레드 환경이라면 HashMap을, 멀티 스레드 환경이라면 Hashtable을 사용하는 편이 좋다.
※ 스레드 : 프로그램이 메모리에서 수행될 때의 작업 단위. 두 개 이상인 경우 멀티 스레드라고 함.
※ 동기화 : 두 개 이상의 스레드가 동싱에 실행되면 같은 메모리에 접근하기 때문에 변수의 값이나 메모리 상태에 문제가 생기는 등 무결성이 깨질 수 있음. 동기화는 스레드가 메모리에 동시에 접근하지 못하도록 순서를 맞추는 것을 의미함.
(3) TreeMap 클래스
TreeMap은 key값으로 자료를 정렬할 때 사용한다.
TreeSet 클래스와 마찬가지로 이진 검색 트리로 구현되어 있으며 Key값으로 정렬하므로 key값에 해당하는 클래스에 Comparable이나 Comparator 인터페이스를 구현해서 정렬 방법을 지정해야 한다.
Comparable이나 Comparator 인터페이스를 구현할 때 반환 값이 양수라면 오름차순, 음수라면 내림차순, 0이라면 중복이기 때문에 추가되지 않는다.
※ String클래스와 Integer클래스는 이미 Comparable 인터페이스를 지정해놓았다.
※ 이진 검색 트리: 이름 그대로 검색의 유용한 구조를 가진 이진트리 방식의 자료구조로 새로 들어온 값이 비교하는 값보다 크다면 오른쪽 작다면 왼쪽으로 이동시키는 이진트리이다.
그 외에 여러 메서드와 상세 내용은 오라클에서 제공하는 자바 레퍼런스를 확인하면 된다.
본 포스팅은 필자가 공부한 것을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고 : Do it! 자바 프로그래밍 입문,
https://www.javatpoint.com/
,
https://docs.oracle.com/javase/8/docs/api/
'Java' 카테고리의 다른 글
[Java]이클립스로 디버깅하기 (0) | 2019.12.23 |
---|---|
[Java] Collection Framework - List 인터페이스 (0) | 2019.12.19 |
[Java] 컬렉션 프레임워크란? (Collection Framework) (0) | 2019.12.18 |
[Java] Annotation (0) | 2019.12.17 |
[Java] 향상된 for문 (Enhanced for loop) (0) | 2019.12.16 |