상세 컨텐츠

본문 제목

JAVA 14-3. 컬렉션 프레임워크 - Map컬렉션

Backend/JAVA-자바

by 사랑짱 2021. 7. 8. 13:37

본문

 

◆Map컬렉션

하나의 요소를 넣을 때, 키/값 쌍(pair)으로 저장

- 키(Key) 객체와 값(value) 객체로 구성된 Map.Entry 객체를 저장하는 구조

- 키는 중복될 수 없지만, 값은 중복 저장 가능

 

출처 : 이것이 자바다

 

1) HashMap

- 키 객체는 중복되지 않기 때문에 hashCode()와 equals()를 재정의하여 동등객체 조건을 체크

- 키 타입으로 String 많이 사용(hashCode()와 equals()가 이미 재정의 되어있기 때문)

 

 

2) Hashtable

- HashMap과 동일하며 hread synchronization(스레드 동기화)가 가능하여

   멀티 스레드 환경에서 안정성 확보

 

 

3) Properties

- 키와 값을 String 타입으로 제한한 Map 컬렉션

- 프로퍼티(~.properties) 파일을 읽어 들일 때 주로 사용

 

프로퍼티(~.properties)  파일

- 옵션 정보, 데이터베이스 연결 정보, 국제화(다국어) 정보를 기록한 텍스트 파일로 활용

- 애플리케이션에서 주로 변경이 잦은 문자열을 저장하여 유지 보수를 편리하게 만듦

- 키와 값이 '='기호로 연결되어 있는 텍스트 파일

  –> ISO 8859-1 문자셋으로 저장

  –> 한글은 유니코드(Unicode)로 변환되어 저장

 

 

4) TreeMap

- 이진트리(binary tree)를 기반으로 한 Map 컬렉션

- 키와 값이 저장된 Map.Entry를 저장

- 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의 변수로 구성  

- 저장과 동시에 TreeMap의 키는 자동 오름차순 정렬

숫자(Integer, Double) 타입일 경우에 값으로 정렬
문자열(String) 타입일 경우에는 유니코드로 정렬
=> java.lang.Comparable 구현 객체가 아닌 경우
     직접 Comparable인터페이스를 implement하고 오버라이딩해줘야 한다.

 

 

 

※ Map 컬렉션의 주요 메소드 

 

 

※ Map의 요소를 순회(traverse)하는 방법

 

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
public class HashMapExam1 {
 
 
    public static void main(String[] args) {
    
        Map<String, Integer> map = new HashMap<String, Integer>();
        
        map.put("신용권"85);    
        map.put("홍길동"90);    
        map.put("동장군"80);    
        
        //-----------------------------------------------------//
        //         Map의 전체 요소를 순회하는 방법들
        //-----------------------------------------------------//        
        
        //1. method : keySet() 을 이용한 순회
        Set<String> keySet = map.keySet();
        Iterator<String> keyIterator = keySet.iterator();
        
        while(keyIterator.hasNext()) {
            String key = keyIterator.next();
            Integer value = map.get(key);
            
            log.info("\t + " + key +" : " + value);
        } //while
        
        //2.method : entrySet() 을 이용한 순회
        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(); 
            String key = entry.getKey(); 
            Integer value = entry.getValue(); 
          
            log.info("\t" + key + " : " + value); 
        }   // while
        
        
        //3. method : forEach() 최종처리 메소드를 이용한 순회
        map.forEach( (t, v) -> {    
                String formatted = String.format("name : %s, value : %s",t, v);
                log.info(formatted);
        });    
        
        log.info(map);
        
    } //main
 
//end class
cs

 

 

◆ 자원 해제하는 방법(아주 중요)

- 컬렉션 객체 사용 후, 메모리 활용을 위해 자원 해제(List, Set, Map 동일)

 

 

 

관련글 더보기