Map
Key(키)와 Value(값)를 가진 중복을 하용하지 않는 집합이다. (키는 중복x 값은 중복o)
즉 한개의 Key와 한개의 Value가 매칭된다.
Map 선언하기
Map<자료형, 자료형> 객체명 = new HashMap<자료형, 자료형>();
※ Map, HashMap import 필요
HashMap
Map Interface를 implements한 클래스로, 중복을 허용하지 않는다.
Map의 특징인 Key - Value의 한 쌍으로 구성된다.
Key 또는 Value의 값으로 null을 허용한다.
HashTable
HashMap과 동일한 내부 구조를 가지고 있다.
hashCode( )와 equals( )를 재정의 하여 동등 객체가 될 조건을 정해서 키로 사용한다.
동기화된 메소드로 구성되었기 때문에 멀티 스레드가 동시에 이 메소드를 실행할 수 없고,
하나의 스레드가 실행을 완료해야 다른 스레드가 실행할 수 있다.
즉 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다.
이것을 스레드 안전(thread safe) 이라고 한다.
주요 메소드
값 추가하기
{a=b}
※ 중복된 key가 들어올 경우 덮어쓴다.
Map<String, String> map = new HashMap<String, String>();
System.out.println(map);
map.put("1", "홍길동");
map.put("2", "김길동");
map.put("3", "김길동");
map.put("1", "홍길동2"); //중복된 key가 들어올 경우 덮어쓰여진다
System.out.println(map);
System.out.println(map.size());
[실행결과]
{}
{1=홍길동2, 2=김길동, 3=김길동}
3
값 반환하기
get("key")
key에 해당하는 값(value) 반환
System.out.println(map.get("1"));
[실행결과]
홍길동2
Set으로 반환하기
keySet( )
key들을 set으로 반환
List<String> list = new ArrayList<String>(map.keySet());
System.out.println(list);
[실행결과]
[1, 2, 3]
해당 값을 key로 가지고 있는지 확인
containsKey("a")
True or False
System.out.println(map.containsKey("1"));
System.out.println(map.containsKey("10"));
[실행결과]
true
false
해당 값을 value로 가지고 있는지 확인
containsValue("a")
True of False
System.out.println(map.containsValue("홍길동2"));
System.out.println(map.containsValue("김길동2"));
[실행결과]
true
false
value값 반환
values( )
System.out.println(map.values());
[실행결과]
[10, 20, 30, 40, 50]
전체 코드
Map<String, String> map = new HashMap<String, String>(); //Map 선언
System.out.println(map);
map.put("1", "홍길동"); //값 추가
map.put("2", "김길동");
map.put("3", "김길동");
map.put("1", "홍길동2");
System.out.println(map);
System.out.println(map.size());
System.out.println(map.get("1")); //값 반환
List<String> list = new ArrayList<String>(map.keySet());
System.out.println(list); //값 Set으로 반환
System.out.println(map.containsKey("1")); //해당 값을 Key로 가지고 있는지 확인
System.out.println(map.containsKey("10"));
System.out.println(map.containsValue("홍길동2")); //해당 값을 Value로 가지고 있는지 확인
System.out.println(map.containsValue("김길동2"));
System.out.println(map.values()); //value값 반환
예제 1.
<key값 출력하기>
Map<String, String> map = new HashMap<String, String>();
map.put("1", "홍길동");
map.put("2", "김길동");
map.put("3", "김길동");
map.put("1", "홍길동2");
//1. map -> list -> for
List<String> list = new ArrayList<String>(map.keySet());
for (int i = 0; i < map.size(); i++) {
System.out.print(list.get(i) + " : ");
System.out.println(map.get(list.get(i)));
}
System.out.println("==========");
//2. map -> set -> iterator
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String key = it.next();
System.out.print(key + " : ");
System.out.println(map.get(key));
}
System.out.println("==========");
//3. map -> set -> foreach
for (String str : map.keySet()) {
System.out.print(str + " : ");
System.out.println(map.get(str));
}
System.out.println("==========");
//4. Map.Entry : map 데이터를 key value 한쌍씩 뽑아내기
//.getKey(), .getValue() 를 이용하여 직접 값 추출
for (Map.Entry<String, String> ele : map.entrySet()) {
System.out.print(ele.getKey() + " : ");
System.out.println(ele.getValue());
}
System.out.println("==========");
//5. map -> set -> Array -> for
//배열로 변환 (set -> Array)
Object[] keyArray = map.keySet().toArray();
for (int i = 0; i < keyArray.length; i++) {
String key = (String) keyArray[i];
System.out.println(key + " : " + map.get(key));
}
- map.entrySet( ) : 해당 map에 담겨있는 key value의 연결들(mapping)을 반환
[실행결과]
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
예제 2.
<map으로 로그인 하기>
//key = id, value = password
Map<String, String> login = new HashMap<String, String>();
login.put("poseidon", "01234567");
login.put("temp", "temp0000");
login.put("admin", "00000000");
login.put("root", "rootroot");
Scanner sc = new Scanner(System.in);
System.out.println("아이디를 입력하세요.");
String id = sc.next();
System.out.println("비밀번호를 입력하세요.");
String pw = sc.next();
if(login.containsKey(id)) {
if(login.get(id).equals(pw)) {
System.out.println("정상 로그인입니다.");
}else {
System.out.println("비밀번호가 일치하지 않습니다.");
}
}else {
System.out.println("해당 ID는 시스템에 없습니다.");
}
[3가지 경우 실행결과]
아이디를 입력하세요.
roo
비밀번호를 입력하세요.
root
해당 ID는 시스템에 없습니다.
..........................................................
아이디를 입력하세요.
root
비밀번호를 입력하세요.
root
비밀번호가 일치하지 않습니다.
..........................................................
아이디를 입력하세요.
root
비밀번호를 입력하세요.
rootroot
정상 로그인입니다.