Java - Collection 프레임워크의 Map

2020. 6. 30. 23:17Java

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
public class Ex4 {
 
    public static void main(String[] args) {
        
        /*
         * Collection 프레임워크의 Map 인터페이스 계열
         * 키(key)와 값(value)을 한쌍으로 갖는 데이터구조
         * 키는 중복 불가능, 값은 중복가능
         * 
         * 대표적인 구현체 클래스 : HashMap, Properties  
         * 
         * ex) 주민등록번호와 이름, 전화번호와 이름 등
         */
        
        
        
        Map map=new HashMap();
        
        System.out.println("Map 객체 크기 : "+map.size());
        System.out.println("Map 객체가 비어있는가? : "+map.isEmpty());
        System.out.println("Map 객체 전체요소 출력 : "+map);
        //Object put(Object key, Object value) : key에 해당하는 value 저장
        map.put("admin","관리자");
        map.put("hong123","홍길동");
        map.put("hong456","홍길동");//Map 객체는 값(value)에 대한 중복 허용
        
        
        System.out.println("Map 객체 전체 요소 출력 : "+map);
        
        map.put("admin","운영자");//Map 객체는 키(key)에 대한 중복 허용하지 않음
        System.out.println("Map 객체 전체 요소 출력 : "+map);//관리자가 운영자로 교체됨
        
        //put() 메서드 리턴타입이 있는 이유는 중복된 키값 지정 시 제거되는 값을 리턴
        System.out.println(map.put("admin","관리자"));//기존 준영자 값 리턴됨
        System.out.println(map.put("admin1","운영자"));//중복키가 아니므로 null 리턴
        
        
        //--------------------------------------------
        //Object get(Object key) : key에 해당하는 value 리턴
        //키가 존재하지 않으면 null 리턴
        System.out.println("admin 키(아이디)의 값(이름) : "+map.get("admin"));
        System.out.println("admin1 키(아이디)의 값(이름) : "+map.get("admin11"));
        
        //boolean containsKey(Object key) : key가 존재하는지 여부 리턴
        
        System.out.println("hong123 키(아이디)가 존재하는가? : "+map.containsKey("hong123"));
        System.out.println("hong123 키(아이디)가 존재하는가? : "+map.containsKey("hong12"));
        
        //boolean containsValue(Object value) : value가 존재하는지 여부 리턴
        
        System.out.println("홍길동 값(이름)이 존재하는가? : "+map.containsValue("홍길동"));
        System.out.println("이순신 값(이름)이 존재하는가? : "+map.containsValue("이순신"));
        
        
        //----------------------------------
        
        //Set keySet() : 객체 안의 모든 key 들을 Set 타입 객체로 리턴
        Set keySet=map.keySet();
        System.out.println("모든 키 : "+keySet);
        //Collection values() : 객체 안의 모든 value 들을 Collection 타입 객체로 리턴
        //Collection 타입의 자식들 타입으로도 전달받을수있음.
        // 단, Collection-> List 또는 Set 으로 다운캐스팅이 불가능하므로
        // new 연산자를 사용하여 객체 생성 파라미터에 values() 메서드 리턴값 전달
        //Collection 타입리턴하는데 list에 넣으면 중복데이터 유지, set에 넣으면 중복데이터삭제
        if(map.values() instanceof List) {
            System.out.println("Map->List 로 변환가능");
        }else {
            System.out.println("Map->List 로 변환 불가능");
            
        }
//        List valueList=(List) map.values();//다운캐스팅 불가! ClassCastExection 발생
        //ArrayList 객체 생성시 , 파라미터로 values()리턴값 전달하면 Collection->List 가능
        List valueList=new ArrayList(map.values());
        System.out.println("모든 값 : "+valueList);
        
        
        //또는 COllection 타입 변수로 저장도 가능
        Collection c=map.values();
        System.out.println("모든 값 : "+c);
        
        
        //Set entrySet() : 모든 키와 값의 세트
        System.out.println(map.entrySet());
        
        //----------------------------------------------------
        
        
        //Object remove(Object key) : key에 해당하는 key 와 value 모두 삭제(삭제값은 리턴됨)
        System.out.println("admin1 키 삭제 : "+map.remove("admin1"));
        System.out.println("admin11 키 삭제 : "+map.remove("admin11"));//키가 존재하지않으므로 null 리턴
        System.out.println(map);
        
        
        //boolean remove(Object key, Object value) : key 와 value 에 해당하는 key, value 삭제 여부리턴
        //삭제될(존재할) 경우 true, 삭제되지(존재하지) 않을 경우 false 리턴
        
        System.out.println("admin 키의 관리자1값 삭제 : "+map.remove("admin""관리자1"));
        System.out.println(map);
        System.out.println("admin 키의 관리자값 삭제 : "+map.remove("admin""관리자"));
        
        System.out.println(map);
        
 
    }
 
}
cs

Map은 키와 값을 쌍으로 갖는 데이터 구조를 가지고 있는 인터페이스 계열이라고 한다.

키는 중복이 될 수 없지만 값은 중복이 가능한데 예를 들면 주민번호는 키이고 값은 이름 정도의 예를 들 수 있다.

List와는 다른 방식으로 저장되고 활용되기때문에 다운 캐스팅도 불가능하고 유의해서 사용되어야 하겠다.

'Java' 카테고리의 다른 글

Java - Generic  (0) 2020.06.30
Java - Stack & Queue  (0) 2020.06.30
Java - BigInteger,BigDecimal  (0) 2020.06.30
Java - StringBuilder & StringBuffer  (0) 2020.06.30
Java - Wrapper  (0) 2020.06.30