본문 바로가기
Programming/Java

[자바 기본] 컬렉션 프레임워크(List / Set / Map) Ⅲ

by 도낙원 2017. 8. 22.
반응형

Map


오늘은 Map을 보도록 하겠습니다.

Map 컬렉션은 다른 것과 다르게 Key 와 Value로 구성이 되어 있습니다.

이것이 가장 두드러진 특징 입니다.


  • Map

키(Key)와 값(Value)으로 구성된 Entry 객체를 저장하는 구조를 가지고 있습니다.
여기서 키와 값은 모두 객체로 이루어져 있으며
또한 키는 중복이 되면 안되지만 값은 중복 저장이 가능합니다.

만약 기존의 저장된 키와 동일한 키로 저장한다면 기존의 값은 사라지고 새로운 값이 저장됩니다.

키 값을 알면 간단하게 get( ) 메소드를 이용하여 키에 저장된 값을 가지고 올 수 있지만

저장된 전체 객체를 대상으로 하나씩 객체를 가져 오고 싶다면 다른 메소드를 사용해야합니다.


1. keySet( ) 메소드

모든 키를 Set 컬렉션으로 얻은 다음, 반복자를 통해 하니씩 얻고 그것을 다시 

get( ) 메소드를 통해 값을 얻어 오는 것입니다.

Set은 순서가 없기 때문에 반복자를 통해 값을 불러왔던 것을 기억하실 겁니다.

그 방법을 사용하시면 됩니다. 

2. entrySet( ) 메소드

모든 Map.entry를 Set 컬렉션으로 얻은 다음, 똑같이 반복자를 통해 하나씩 얻어 오고

그것을 다시 getKey( ) 와 getValue( ) 메소드로 키와 값을 얻으면 됩니다.


두 방법 모두 이용해보도록 하겠습니다.


1) HashMap

Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. 

키와 값의 타입은 기본 타입은 사용하지 못합니다. 클래스 및 인터페이스 타입만 사용 가능합니다.

예를 들자면

Map<String, Integer> maplist = new HashMap<String, Integer>( );

키는 String 타입이고 값은 Integer 타입입니다.


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
package Collection;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
 
public class MapCollection {
 
    public static void main(String[] args) {
 
        Map<String, Integer> maplist = new HashMap<String, Integer>();
        
        maplist.put("Jimmy"27);
        maplist.put("Nick"28);
        maplist.put("Rain"28);
        maplist.put("Josh"26);
        maplist.put("Jimmy"26); 
// 이 값은 첫 번째 키 값과 같기 때문에 기존의 저장 값이 아닌 현재 값으로 저장됨
        
        System.out.println("map size : " + maplist.size());
        System.out.println("----------------------------");
 
        // 객체를 하나씩 처리 - keySet 메소드 이용
        Set<String> keySet = maplist.keySet(); // keySet 얻는 방법
        Iterator<String> keyIterator = keySet.iterator(); // 반복자
        while(keyIterator.hasNext()) {
            String key = keyIterator.next(); // key 가져오기
            Integer value = maplist.get(key); // value 가져오기
            System.out.println("\t"+ key + " : " + value);
        }
 
        System.out.println("----------------------------");
        
        // 객체를 하나씩 처리 - entrySet 메소드 이용
        Set<Map.Entry<String, Integer>> entrySet = maplist.entrySet(); // entrySet 얻는 방법
        Iterator<Map.Entry<String, Integer>> entryInterator = entrySet.iterator(); // 반복자
        while(entryInterator.hasNext()) {
            Map.Entry<String, Integer> entry = entryInterator.next();
            String key = entry.getKey(); // key 가져오기
            Integer value = entry.getValue(); // value 가져오기
            System.out.println("\t" + key + " : " + value);
        }
    }
 
}
 
cs

이걸 이용해서 이번에는 클래스로 만들어 해보시길 추천합니다.


2) HashTable

HashMap과 동일한 내부 구조를 가지고 있습니다.

HashMap과 가장 큰 차이점은 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에

이 메소드를 사용할 수 없고 하나의 스레드가 종료되면 다른 스레드를 실행할 수 있습니다.

그래서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있습니다.(스레드 안전)

사용하는 방법은 HashMap과 동일합니다.


HashTable을 이용하여 아이디와 비밀번호를 이용하여 간단하게 로그인 하는 

기능을 구현 해보도록 하겠습니다.


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
package Collection;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Hashtable;
import java.util.Map;
 
public class MapCollection {
 
    public static void main(String[] args) throws IOException {
 
        Map<StringString> hashTable = new Hashtable<StringString>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String id,pw;
        
        hashTable.put("Jimmy""1234");
        hashTable.put("Rain""2345");
        hashTable.put("Nick""3456");
        hashTable.put("Josh""4567"); // 현재 테이블에 저장된 아이디 비밀번호
        
        while(true) {
            System.out.println("아이디와 비밀번호를 입력하세요");
            System.out.print("아이디 : ");
            id = br.readLine(); // 입력받는 곳
            
            System.out.print("비밀번호 : ");
            pw = br.readLine(); // 입력받는 곳
            
            if(hashTable.containsKey(id)) { // id와 같은 key가 있으면 true
                if(hashTable.get(id).equals(pw)) { // pw 체크
                    System.out.println("로그인에 성공하였습니다.");
                    break;
                } else {
                    System.out.println("비밀번호가 다릅니다.");
                }
            } else {
                System.out.println("존재하지 않는 아이디입니다.");
            }
        }
    }
} // containsKey( ) 메소드는 테이블 안에 매개변수로 들어온 값과 일치하는 것이 있는지
// 찾아줍니다. 있으면 true 없으면 false를 반환합니다.
 
cs


3)Properties

Properties는 Hashtable의 하위 클래스 이기 때문에 Hashtable 의 특징을 모두 가지고 있습니다.

가장 큰 특징은 키와 값을 오직 String 타입으로 밖에 사용 못합니다. 

그래서 주로 애플리케이션의 옵션 정보, 데이터 베이스 연결 정보, 다국어 정보의 파일을 읽을 때 

사용합니다.


대충 콜렉션에 대해 공부를 했습니다.

좀 더 익숙해지게 연습을 하시면 되겠습니다.





<출처>

이것이 자바다

반응형
사업자 정보 표시
난길샵 | 박현숙 | 경상북도 성주군 월항면 수죽길 98길 | 사업자 등록번호 : 256-07-01668 | TEL : 010-9909-8420 | Mail : skr04@naver.com | 통신판매신고번호 : 제2020-경북성주-52호 | 사이버몰의 이용약관 바로가기

댓글