컬렉션(Collection) - 4. HashMap
HashMap 은 특정값을 찾을 때 유용하다.
=== Map 계열 ===
1. HashMap 과 Hashtable(Web용) 이 있다.
2. Map 계열은 List 계열(Vector, ArrayList, LinkedList)처럼 index 가 사용되어 저장되는 것이 아니라,
Map 계열은 key값과 value값을 쌍으로 사용하여 저장하는데
데이터 저장시 사용되는 메소드는 put(String key, Object value)메소드를 사용한다.
이때 key값은 반드시 고유한 값을 가져야 하고, value값은 *중복된 값이 와도 괜찮다*.
3. Map 계열에 저장된 key값들은 순서와는 상관없이 저장된다.
4. Map 계열에 저장된 value값을 추출하려면 key를 이용해서 가져오는데
value 값의 추출은 get(String key) 메소드를 사용한다.
public static void main(String[] args) {
// HashMap<String, Member> mbrMap = new HashMap<String, Member>();
// 또는
// HashMap<String, Member> mbrMap = new HashMap<>();
// 또는
Map<String, Member> mbrMap = new HashMap<>();
// 모두 사용 가능
mbrMap.put("youjs", new Member("youjs","qwer1234$","유재석"));
mbrMap 이라는 HashMap 저장소에 new Member("youjs","qwer1234$","유재석")을 저장하는데
저장된 new Member("youjs","qwer1234$","유재석")을 찾고자 할때는
"youjs" 만 넣어주면 new Member("youjs","qwer1234$","유재석") 이 나오도록 저장하겠다는 말이다.
mbrMap.put("eom",new Member("eom","qwer1234$","엄정화"));
mbrMap.put("kanghd",new Member("kanghd","qwer1234$","강호동"));
mbrMap.put("leess",new Member("leess","qwer1234$","이순신"));
mbrMap.put("kimth",new Member("kimth","qwer1234$","김태희"));
mbrMap.put("kangkc",new Member("kangkc","qwer1234$","강감찬"));
mbrMap.put("leehr",new Member("leehr","qwer1234$","이혜리"));
==== mbrMap 에 저장되어진 Member 객체들 중에 key 가 "leess" 인 value 값(지금은 Member) 을 추출해서
추출된 회원(Member)의 정보를 출력하세요 ====
String search_id = "leess";
Member mbr = mbrMap.get(search_id);
if(mbr != null)
mbr.info_print();
else
System.out.println(">> 검색하신 " + search_id + "에 해당하는 회원은 없습니다. <<");
/*
=== 이순신님의 회원정보 ===
1. 아이디: leess
2. 비밀번호: qwer1234$
3. 성명: 이순신
*/
==== mbrMap 에 저장되어진 Member 객체들 중에 key 가 "leess" 인 value 값(지금은 Member) 을 추출해서
그 회원이 있다면 추출된 회원(Member)의 정보를 출력하고,
없다면 >> 검색하신 " + search_id + "에 해당하는 회원은 없습니다. << 라고 출력하기 ====
// key 값은 한개만 가능하기 때문에 덮어씌움
mbrMap.put("leess",new Member("leess","abcd0070$","이상순"));
search_id = "leess";
mbr = mbrMap.get(search_id);
if(mbr != null)
mbr.info_print();
else
System.out.println(">> 검색하신 " + search_id + "에 해당하는 회원은 없습니다. <<");
/*
=== 이상순님의 회원정보 ===
1. 아이디: leess
2. 비밀번호: abcd0070$
3. 성명: 이상순
*/
value 값은 중복되어도 괜찮다.
mbrMap.put("leess_2",new Member("leess","abcd0070$","이상순"));
search_id = "leess_2";
mbr = mbrMap.get(search_id);
if(mbr != null)
mbr.info_print();
else
System.out.println(">> 검색하신 " + search_id + "에 해당하는 회원은 없습니다. <<");
/*
=== 이상순님의 회원정보 ===
1. 아이디: leess
2. 비밀번호: abcd0070$
3. 성명: 이상순
*/
=== mbrMap 에 저장되어진 모든 key 들을 읽어오는 첫번째 방법 ===
Set<String> key_sets = mbrMap.keySet();
for(String key: key_sets) {
System.out.println(key);
} // end of for
/*
순서는 무작위
leess_2
eom
youjs
kimth
kangkc
leehr
kanghd
leess
*/
=== mbrMap 에 저장되어진 모든 회원들의 정보를 출력하시오 ===
- 순서는 무작위로 나타난다.
for(String key: key_sets) {
mbrMap.get(key).info_print();
} // end of for
=== mbrMap 에 저장되어진 모든 key 들을 읽어오는 두번째 방법 ===
Set<String> key_sets_2 = mbrMap.keySet(); // 키값이 String 인 뭉치 Set 이 저장소
Iterator<String> it = key_sets_2.iterator(); // 리턴 타입이 스트링인 iterator
// Iterator 는 저장소가 아니라 Collection 에 저장되어진 요소(Element) 를 읽어오는 용도로 쓰이는 것 ( for 문 안쓰고 )
while(it.hasNext()) {
/* it.hasNext() 는 it 에서 현재 it 가 가지고 있는 여러 String 데이터 중 한개를 끄집어내서 존재하는지 알아보는 것
존재하면 true, 존재하지 않으면 false 를 리턴해준다.
그러므로 현재 key의 개수가 8개 이므로 8번 반복한다.*/
String key = it.next();
/* 실제로 키값인 String 값을 it 에서 끄집어낸다.
그러면 끄집어낸 String 값은 더 이상 it 에 남아있지 않게 된다. */
System.out.println(key);
/*
leess_2
eom
youjs
kimth
kangkc
leehr
kanghd
leess
*/
} // end of while--------------------------------------
System.out.println("\n~~~~~~~~~~~~ 한번 더 ~~~~~~~~~~~~\n");
while(it.hasNext()) {
String key = it.next();
System.out.println(key);
// 안나옴
} // end of while--------------------------------------
System.out.println("\n~~~~~~~~~~~~ 다시 처음부터 ~~~~~~~~~~~~\n");
it = key_sets_2.iterator();
while(it.hasNext()) {
String key = it.next();
System.out.println(key);
// 안나옴
} // end of while--------------------------------------
=== mbrMap 에 저장되어진 모든 회원들의 정보를 출력하시오 ===
- 순서는 무작위
Set<String> key_sets_3 = mbrMap.keySet();
Iterator<String> it3 = key_sets_3.iterator();
while(it3.hasNext() ) {
String key = it3.next();
mbrMap.get(key).info_print();
}
======= 특정 멤버 삭제하기 =======
mbrMap.remove("kangkc"); // 특정 멤버 지우기
for(String key : key_sets_3) { // : 배열이름(주로 list, set)
mbrMap.get(key).info_print();
}
======= 모든 멤버 삭제하기 =======
mbrMap.clear();
System.out.println( "mbrMap.isEmpty() => " + mbrMap.isEmpty());
// true
// ======================================================================================= //
[퀴즈] mbrMap 에 신규회원을 저장하려고 한다.
new Member("kimth","qwer1234$","김태환") 을 mbrMap 에
key 값은 "kimth" 으로 저장하려고 할 때
"kimth" key가 이미 존재한다면 아이디 kimth 은(는) 이미 사용중입니다. 라고 메세지 출력
"kimth" key가 이미 존재하지 않으면 mbrMap 에 new Member("kimth","qwer1234$","김태환") 을 저장하도록 코드를 작성하시오.
String input_id = "kimth";
boolean b = false;
if( mbrMap.get(input_id) == null )
mbrMap.put("kimth", new Member("kimth","qwer1234$","김태환"));
else
System.out.println(">> 아이디 " + search_id +"은(는) 이미 사용중입니다. <<");