< Map >
- 특징 :
- 순서를 가지지 않는다
- key와 value 가 쌍으로 이루어진다
- key는 중복이 안되나, value는 중복이 가능하다
- 키가 중복되는 데이터가 있을 때 마지막 데이터값을 저장한다
1. HashMap : 일반적으로 많이 사용하는 Map 자료구조
2. HashTable : HashMap과 동일하나 Thread-Safe 해 동기화를 지원
3. LinkedHashMap : 순서를 가지지 않는 Map 자료구조와 달리 LinkedHashMap은 들어온 순서대로 순서를 가짐
4. TreeMap : TreeSet과 같이 정렬하여 데이터를 저장 -> 데이터 저장시 정렬로 인해 저장 시간이 다른 자료구조 대비 오래걸림
<HashMap>
1. 선언
HashMap<String,String> map = new HashMap()
2. 데이터 삽입 : put(key, value)
map.put("myid", "1234");
map.put("your", "1111");
map.put("your", "3114");
- map.put("myid", 1234); int 기본형 입력시 wrapper class 처리가 되어 Integer타입으로 변한다.
- <String>제네릭 정의 시 1234 입력하면 오류 발생
- 중복을 허용하지 않으나 중복 된 key 값이 있을 때 가장 마지막으로 들어온 데이터를 넣는다
3. 데이터 검색 : get(key) value값을 반환
(String)map.get("myid");
- "1234"
4. 데이터 삭제 : remove(key)
map.remove("myid");
- key("myid")에 해당하는 value("1234")가 삭제된다
5. key 값 전체를 반환 : keySet()
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()) {
String key = it.next();
System.out.println(key);
}
- Map은 반복자 Iterator를 지원하지 않기 때문에 Set 타입 변수에 넣는다??
6. value 값 전체를 반환 : values()
Collection<String> values = map.values();
Iterator<String> itV = values.iterator();
while(itV.hasNext()) {
String value = itV.next();
System.out.println(value);
}
- Map은 반복자 Iterator를 지원하지 않기 때문에 Collection 타입으로 가져온다??
7. 키값의 존재유무 확인 : containsKey(key) -> true, false 반환
8. key와 value를 전체 반환 : entrySet()
- map 인터페이스 내부 의 entry 인터페이스를 사용
- 내부에 getkey, getvalue 가 포함되어 있다
- <Stirng, String> 타입만 정의해주면 된다. 나머지는 정해진 문법
Set<Map.Entry<String, String>> entry = map.entrySet();
Iterator<Map.Entry<String, String>> itE = entry.iterator();
while(itE.hasNext()) {
Map.Entry<String, String> ent = itE.next();
String key = ent.getKey();
String value = ent.getValue();
System.out.println("[key]:" + key + ", [value]:" + value);
}
//Iterator가 아닌 for문으로 출력방법
for(String key: map.keySet()) {
System.out.println(key);
}
- for문 활용 출력
for(Map.Entry<String, String> ent : map.entrySet()) {
String key = ent.getKey();
String value = ent.getValue();
System.out.println("[key]:" + key + ", [value]:" + value);
}
< 간단 연습문제>
while(true) {
System.out.println("아이디 입력: ");
String id = sc.next();
System.out.println("패스워드 입력: ");
String password = sc.next();
if(!map.containsKey(id)) { //key값이 존재하지 않는다면
System.out.println("아이디가 존재하지 않습니다. 다시 입력하세요 :");
continue;
}else {
if(!map.get(id).equals(password)) { //값을 가져오니까
System.out.println("패스워드를 다시 입력하세요");
}else {
System.out.println("로그인 성공");
break;
}
}
}
'java' 카테고리의 다른 글
Collection(Set) (0) | 2022.10.12 |
---|---|
Properties (0) | 2022.10.12 |
Iterator (반복자 패턴) (0) | 2022.10.11 |
제네릭과 컬렉션 (0) | 2022.10.11 |
Collection(List) (0) | 2022.10.11 |