1. 특징
① Entry구조: 키(key, 객체)와 값(value, 객체)를 저장
② 키는 중복 저장 불가, 값은 중복 저장 가능
- 기존에 저장되어 있는 키와 같은 키로 저장 시, 기존 값은 새로운 값으로 업데이트 됨
2. Map인터페이스 메소드
- 특징 : 키로 객체들을 관리, 키를 매개값으로 갖는 메소드 다수
기능 |
메소드 |
설명 |
객체 추가 |
put(Key,Value) |
- 키와 값 추가 - 저장 시 값 반환 |
객체 검색 |
containsKey(Key) |
- 키 저장 여부 조사 - 논리 값 반환 |
containsValue(Value) |
- 값 저장 여부 조사 - 논리 값 반환 |
|
Set<Map.Entry<Key,Value>>entrySet( ) |
- Set에 Map.Entity 객체(키, 값 쌍)를 저장하여 반환 |
|
get(Key) |
- 키가 있는 값 반환 |
|
isEmpty( ) |
- 컬렉션 비어 있는지 여부 조사 - 논리 값 반환 |
|
Set<Key> keyset( ) |
- Set에 모든 키를 담아 반환 |
|
int size( ) |
- 저장된 키의 총 수 반환 |
|
Collection<Value> values( ) |
- 저장된 모든 값을 컬렉션에 저장하여 반환 |
|
객체 삭제 |
clear( ) |
- 모든 Map.Entity 객체(키, 값 쌍) 삭제 - 반환 값 없음 |
remove(Key) |
- 주어진 키와 일치하는 Map.Entity 객체(키, 값 쌍) 삭제 - 값을 반환 |
3. Map인터페이스의 구현 클래스
(1) HashMap
1) 특징
① Key값 중복 확인 방법
- hashcode( ) 메소드 호출 : 저장할 객체의 해시코드를 얻음, 저장할 객체의 해시코드와 저장된 객체의 해시코드 비교
해시코드가 같을 경우 equals( ) 메소드 호출, 해시코드가 다른 경우 다른 key로 인식
- equals( ) 메소드 호출 : 동일한 해시코드가 있을 경우 저장할 key값과 저장된 key값을 추가 비교
② 키와 값 타입 제약
- 가능한 타입 : 클래스 타입, 인터페이스 타입
- 불가능한 타입 : 기본 타입 (byte, short, int, float, double, boolean, char)
2) 예시
① 예시1
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package collectiontest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class Example { public static void main(String[] args) { //1.객체 생성 Map<String, Integer> map = new HashMap<String,Integer>(); //2.객체 저장 map.put("김밥",3000); map.put("라면",2000); map.put("튀김",5000); //3-0.객체 검색 map.get("김밥"); //3-1.저장된 전체 객체를 대상으로 하나씩 객체 얻는 방법(반복해서 key를 얻음, Map에서 값 찾음) Set<String> KeySet = map.keySet(); Iterator<String> KeyIterator = KeySet.iterator(); while (KeyIterator.hasNext()) { String key = KeyIterator.next(); Integer value = map.get(key); System.out.println(value); } //3-2.저장된 전체 객체를 대상으로 하나씩 객체 얻는 방법(반복해서 Map.Entity를 얻음, Map.Entity에서 키와 값 찾음) Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); Iterator<Map.Entry<String,Integer>> entryIterator = entrySet.iterator(); while (entryIterator.hasNext()) { Map.Entry<String,Integer> entry = entryIterator.next(); System.out.println(entry); } //4-0.객체 삭제(키로 Map.Entity 제거) map.remove("김밥"); //4-0.객체 삭제(모든 Map.Entity 제거) map.clear(); } } |
② 예시2
- [Product]
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 | package collectiontest; public class Product { public int productCode; public String name; public Product(int productCode, String name) { this.productCode = productCode; this.name = name; } // 제품코드와 제품명이 동일할 경우 true값 반환 public boolean equals(Object obj) { if (obj instanceof Product) { Product product = (Product) obj; return (productCode==product.productCode) && (name.equals(product.name)); }else { return false; } } // 제품코드와 제품명이 동일할 경우 동일한 해시코드 반환 public int hashCode() { return productCode + name.hashCode(); } } |
- [Example]_Product의 키와 값이 동일할 경우 같은 키
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package collectiontest; import java.util.HashMap; import java.util.Map; public class Example2 { public static void main(String[] args) { //1.Map 컬렉션 생성 Map<Product, Integer> map = new HashMap<Product,Integer>(); //2.객체 저장 (제품 코드와 제품명이 동일한 Product객체를 키로 저장) map.put(new Product(1000, "볼펜"), 800); map.put(new Product(1000, "볼펜"), 800); } } |
(2) Hashtable
① HashMap과의 공통점
- Key값 중복 확인 : hashcode( ) 메소드, equals( ) 메소드 호출
(3) Properties
① Hashtable의 하위 클래스
② 키, 값 제약 : String 타입만 가능
③ 사용법
- 애플리케이션 옵션 정보 얻기
- 데이터베이스 연결 정보 얻기
- 다국어 정보 저장 프로퍼티 파일 읽기
(4) TreeMap
1) 특징
① 이진 트리 기반
- 첫 번째로 저장된 루트 노드부터 시작, 값의 크기를 비교하면서 작은 값은 왼쪽, 큰 값은 오른쪽에 저장
( 왼쪽 노드부터 오른쪽 노드까지 오름차순, 오른쪽 노드부터 왼쪽 노드까지 내림차순 )
- 문자 저장 시, 문자의 유니코드 값을 비교
② 노드 구성
- Map.Entry (키, 값)
- 변수 : 왼쪽 노드와 오른쪽 노드 (자식 노드)를 참조하기 위한 변수 2개
③ 객체 저장 방식
- 자동 정렬
- 부모 키값과 비교 후 낮은 것은 왼쪽 자식 노드에 저장, 높은 것은 오른쪽 자식 노드에 저장
2) 메소드
① 검색 메소드
메소드 | 설명 |
firstEntry( ) | 제일 아래 Map.Entry 반환 |
lastEntry( ) | 제일 위 Map.Entry 반환 |
lowerEntry(key) | 주어진 객체 바로 아래 Map.Entry 반환 |
higherEntry(key) | 주어진 객체 바로 위 Map.Entry 반환 |
floorEntry(key) | 주어진 키와 동등한 키가 있을 경우 Map.Entry 반환, 없으면 주어진 키 바로 아래 Map.Entry 반환 |
ceilingEntry(key) | 주어진 키와 동등한 키가 있을 경우 Map.Entry 반환, 없으면 주어진 키 바로 위 Map.Entry 반환 |
pollFirstEntry( ) | 제일 아래 Map.Entry 추출 후 제거 |
pollLastEntry( ) | 제일 위 Map.Entry 추출 후 제거 |
② 정렬 메소드
메소드 | 설명 |
descendingKeySet( ) | - 내림차순 정렬 - 반환 타입 : NavigableSet<Key> |
descendingMap( ) | - 내림차순 정렬 : 한 번 사용 - 오름차순 정렬 : 두 번 사용 - 반환 타입 : NavigableMap<Key,Value> |
③ 범위 검색 메소드
메소드 | 설명 |
headMap (K toKey, boolean inclusive) | - 주어진 키보다 아래 Map.Entry 반환 - 주어진 키의 Map.Entity 포함 여부는 두 번째 매개값에 따름 - 반환 타입 : NavigableMap<Key,Value> |
tailMap (K fromKey, boolean inclusive) | - 주어진 객체 보다 위 Map.Entry 반환 - 주어진 객체 포함 여부는 두 번째 매개값에 따름 - 반환 타입 : NavigableMap<Key,Value> |
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive ) | - 주어진 키 사이의 Map.Entry들을 반환 - 매개값 설명 : 시작 키, 시작 Map.Entry포함 여부, 끝 키, 끝 Map.Entry 포함 여부 - 시작과 끝 키의 Map.Entry 포함 여부는 두 번째, 네 번째 매개값에 따름 - 반환 타입 : NavigableMap<Key,Value> |
'프로그래밍 > Java' 카테고리의 다른 글
[JAVA 코드] txt 파일 읽기 (0) | 2018.12.05 |
---|---|
[JAVA 이론] JDBC 프로그래밍(DB연결) (0) | 2018.12.05 |
[JAVA 이론] Set Collection (0) | 2018.11.15 |
[JAVA 이론] List Collection (0) | 2018.11.13 |
[JAVA 이론] 컬렉션 프레임워크(Collection Framework) (0) | 2018.11.12 |
댓글