Map
오늘은 Map을 보도록 하겠습니다.
Map 컬렉션은 다른 것과 다르게 Key 와 Value로 구성이 되어 있습니다.
이것이 가장 두드러진 특징 입니다.
Map
만약 기존의 저장된 키와 동일한 키로 저장한다면 기존의 값은 사라지고 새로운 값이 저장됩니다.
키 값을 알면 간단하게 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<String, String> hashTable = new Hashtable<String, String>(); 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 타입으로 밖에 사용 못합니다.
그래서 주로 애플리케이션의 옵션 정보, 데이터 베이스 연결 정보, 다국어 정보의 파일을 읽을 때
사용합니다.
대충 콜렉션에 대해 공부를 했습니다.
좀 더 익숙해지게 연습을 하시면 되겠습니다.
<출처>
이것이 자바다
'Programming > Java' 카테고리의 다른 글
[Java] 엑셀 파일 읽고 쓰기 (1탄) (0) | 2018.07.15 |
---|---|
[기초] 자바 쉬운 프로젝트 #1 (1) | 2018.04.13 |
[자바 기본] 스택과 큐(Stack and Queue) (0) | 2017.08.18 |
[자바 기본] 컬렉션 프레임워크(List / Set / Map) Ⅱ (0) | 2017.08.18 |
[자바 기본] 컬렉션 프레임워크(List / Set / Map) Ⅰ (0) | 2017.08.17 |
댓글