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 |