profile image

L o a d i n g . . .

Map

Key와 Value로 구성된 Map.Entery 객체를 저장하는 구조를 가진 컬렉션

Entry는 Map인터페이스 내부에 선언된 중첩 인터페이스. 여기서 키와 값은 모두 객체

 

 

기능 메소드 설명
객체추가 V put(K Key, V value) 주어진 키로 값을 저장
새로운 키일경우 null리턴,
동일키가 있을 경우 값대체 후 이전값 리턴
객체 검색 boolean containsKey(Object key) 주어진 키가 있는지 여부 확인
boolean containsValue(Object value) 주어진 값이 있는지 여부 확인
Set(Map.Entry<K, V>> entrySet() 키, 값 쌍으로 구성된 모든 Map.Entry객체를 Set에 담아 리턴
V get(Object key) 주어진 키가 있는 값을 리턴
boolean isEmpty() 컬렉션이 비어있는지 여부 확인
Set<K> keySet() 모든 키를 Set객체에 담아서 리턴
객체 삭제 int size() 저장된 키의 총 수 리턴
Collection<V> values() 저장된 모든 값을 Collection에 담아 리턴
void clear() 모든 Map.Entry(키 값)삭제
V remove(Object key) 주어진 키와 일치하는 Map.Entry를 삭제하고 값리턴

 

 

 

HashMap

Map 인터페이스를 구현한 대표적인 Map 컬렉션. MashMap키는 hashCode()의 리턴값이 값은 메소드와 equals()메소드가 true를 리턴한 동등객체로 한다.

package a220814;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapEx {
	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		
		map.put("신용권", 85);
		map.put("홍길동", 90);
		map.put("동장군", 80);
		map.put("홍길동", 95);
		System.out.println("총  Entry 수: " + map.size());
		
		System.out.println("\t홍길동: " + map.get("홍길동"));
		System.out.println();
		
		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("\t" + key + " : " + value);
		}
		System.out.println();
		
		map.remove("홍길동");
		System.out.println("총 Entry 수: " + map.size());
		
		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();
			System.out.println("\t" + key + " : " + value);
		}
		System.out.println();
		
		map.clear();
		System.out.println("총 Entry 수 : " + map.size());
	}
}

이름을 키로 값을 점수로 저장한 예시

 

 

 

 

HashTable

HashMap과 동일한 내부구조를 가지고 있다. 그러나  동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 HashTable의 메소드를 실행할 수 없고 하나의 스레드가 메소드를 실행을 완료해야만 다른 스레드가 실행할 수 있다.

때문에 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다. (Thread safe)

(어레이리스트와 백터가 생각나쥬)

 

package a220814;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable;
import java.util.Map;

public class HashTableEx {
	public static void main(String[] args) throws IOException {
		Map<String, String> map = new Hashtable<>();
		
		map.put("spring", "12");
		map.put("summer", "123");
		map.put("fall", "1234");
		map.put("winter", "12345");
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		
		while (true) {
			System.out.println("아이디와 비밀번호를 입력해주세요.");
			System.out.println("아이디");
			String id = br.readLine();
			System.out.println("비밀번호");
			String pw = br.readLine();
			System.out.println();

			if (map.containsKey(id)) {
				if (map.get(id).equals(pw)) {
					System.out.println("로그인 되었습니다");
					break;
				} else {
					System.out.println("비밀번호가 일치하지 않습니다");
				}
			} else {
				System.out.println("입력하신 아이디가 존재하지 않습니다");
			}
		}
		br.close();
	}
}

키보드로 아이디와 비밀번호를 입력받아 Hashtable에 저장되어있는 키 값으로 로그인 여부를 출력

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 : 

- 혼자 공부하는 자바(신용권), 한빛미디어

 

반응형

'개발 > JAVA' 카테고리의 다른 글

[Java] 보조 스트림  (0) 2022.08.20
[Java] 입출력 스트림  (0) 2022.08.16
[Java] 컬렉션 프레임워크 - List, Set  (0) 2022.08.14
[Java] 스레드 제어  (0) 2022.07.27
[Java] 멀티 스레드2  (0) 2022.07.26
복사했습니다!