key 값과 value 값을 저장
key 값들은 순서와 상관없이 저장
key 값 : 고유한 값
value 값 : 중복된 값 가능
모든 key 읽기, 모든 객체 정보 읽기
-> key : ' key ' 를 출력
-> 객체 정보 : ' mbr_map.get(key) ' 를 출력
또는 Iterator 이용시, ' mbr_map.get(itr.next()) ' 를 출력
특정 key 의 정보 삭제 : remove(String key)
모든 정보 삭제 : 객체이름.clear()
크기 : 객체이름.size()
-> 기본모형 Hash <K, V>
HashMap<Integer, Member> mbr_map
= new HashMap<Integer, Member>();
-> HashMap <> 안 내용 생략 불가능한 경우
HashMap<> mbr_map = new HashMap<String, Member>();
-> HashMap <> 안 내용 생략 가능한 경우
HashMap<String, Member> mbr_map = new HashMap<>();
// jdk 8 이후부터 가능
Map<String, Member> mbr_map = new HashMap<>();
// jdk 8 이후부터 가능
-> put(String key, Object value) 메소드 사용
mbr_map.put(990520,
new Member("jjoung","Abcd1234$", "양혜정", "9905202"));
// Member () 가 아닌 String 타입만 저장시킬 경우
HashMap<Integer, String> mbr_map1
= new HashMap<Integer, String>();
mbr_map1.put(1234,"String 타입만 저장");
-> value 값 추출시 get(String key) 메소드 사용
System.out.println(mbr_map.get(990520).toString());
// mbr_map.get(990520) => Member에 있는 990520
// 또는
System.out.println(mbr_map.get(990520));
// toString() 은 생략 가능
key 값이 중복되면 value 값은 덮어씌워진다.
Ex)
Map<String, Member> mbr_map = new HashMap<>();
mbr_map.put("jjoung", // key 값을 아이디인 jjoung 로 설정함
new Member("jjoung","Abcd1234$","양혜정",9905202));
// put 을 사용하여 저장하기
mbr_map.put("jjoung", // key 값을 아이디인 jjoung 로 설정함
new Member("jjoung","Abcd5678!","쫑쫑이",2401164));
// key 값이 동일할 시 나중에 출력한 값이 value 값을 덮어씌운다.
Member mem1 = new Member("sky","Abcd13579@","하늘이",0001011);
Member mem2 = mem1;
mem2.setName("하늘"); // mem1 과 mem2 이름이 "하늘"로 바뀐다.
// 저장하기
mbr_map.put("mem1",mem1);
mbr_map.put("mem2",mem2); // key 가 다르면 동일한 value 가능 O
-> keySet 에 set 은 '중복된 값은 못 들어온다' 라는 뜻이다.
-> SET
방법1.
Set<String> key_set = mbr_map.keySet();
// 중복이 아닌 모든 key값 key_set 에 대입
for(String key : key_set) {
// 중복된 key값이 있는 경우 하나만 출력된다.
System.out.println(key)
} // end of for--------------
방법2. (Iterator 이용)
Set<String> key_set = mbr_map.keySet();
// 중복이 아닌 모든 key값 key_set 에 대입
Iterator<String> itrator = key_set.iterator();
// Iterator 에 key_set 값 넣어주기
while(itrator.hasNext()) { // 실제 key 값이 있으면 true
// hasNext() 의 return 타입 : boolean
String key = itrator.next(); // 실제 key 값을 가져온다.
System.out.println(key);
} // end of while(itrator.hasNext())------------------
// == 이후, 한번 더 Iterator 사용 시 ==
while(itrator.hasNext()) { // 실제 key 값이 있으면 true
// ★ Point.
// 이전에 itrator.next()로 itrator의 key 값을
// 모두 String key가 가져갔으므로
// itrator 에 존재하는 key 값은 없다.
String key = itrator.next(); // 실제 key 값을 가져온다.
System.out.println(key);
} // end of while(itrator.hasNext())-------------------
// == 이후, 다시 iterator 에 key값 넣어주기 ==
iterator = key_set.iterator();
방법1.
Set<String> key_set = mbr_map.keySet();
// 중복이 아닌 모든 key값 key_set 에 대입
for(String key : key_set) {
System.out.println(mbr_map.get(key));
// Map 계열에 저장된 key 값들은 순서 상관없이 저장되기 때문에
// 무작위로 출력된다.
방법2. (Iterator 이용)
Set<String> key_set = mbr_map.keySet();
// 중복이 아닌 모든 key값 key_set 에 대입
Iterator<String> itrator = key_set.iterator();
// Iterator 에 key_set 값 넣어주기
while(itrator.hasNext()) { // 실제 key 값이 있으면 true
//======= 1 =========//
String key = itrator.next(); // 실제 key 값을 가져온다.
System.out.println(key);
// 또는
//======= 2 =========//
System.out.println(mbr_map.get(itrator.next()));
// mbr_map에서 실제 key 값인 것을 가져와서 출력
} // end of while(itrator.hasNext())-------------------
=> .remove("key값")
Ex)
Member deleted_mbr = mbr_map.remove("@");
// @ 위치에 key 값 입력하기
=> .clear()
mbr_map.clear(); // 모든 정보 삭제하기
userid = sc.nextline();
if(mbr_map.get(userid) == null) { // get => 꺼내오기
// userid가 mbr_map 에 없다면
mbr_map.put(userid
, new Member(userid,"abcd1234$", "사용자1", "9710121"))
// put => 저장하기
System.out.println("\n >> 회원가입 성공! <<");
} else {
System.out.println
("\n >>" + userid + "아이디는 이미 사용중입니다.");
} // end of if~else------------
★ Point
HashMap(Map) 은 for 문 사용 X (권장)
for 문을 사용할 시 속도가 느려진다.
-> 이유 : map 은 순서를 따지지 않기 때문에 매번 확인이 필요하기 때문이다.
=> 전체를 꺼내와야 하는 경우, ArrayList 순서대로 for문
=> 하나를 꺼내와야 하는 경우, Map 이용
System.out.println(mbr_map,size());
HashSet : 저장 순서 상관 X
LinkedHashSet : 저장되어진 순서대로 나온다.
Set<클래스명> 객체이름 = new HashSet<>();
Set<클래스명> 객체이름 = new LinkedHashSet<>();
-> 생략 가능/불가능 은 HashMap 과 동일
Ex) 객체이름이 mbr_set 이라고 가정
mbr_set.add(990520,
new Member("jjoung","Abcd1234$", "양혜정", "9905202"));
String id = "velog"; // 특정 id 를 velog 라고 가정
Iterator<Member> itr = mbr_set.iterator();
// mbr_set 에 저장된 모든 Member 객체 정보 담기
boolean isExist = false;
while(itr.hasNext()) { // itr에 데이터가 존재하면 true
Member mbr = itr.next();
// itr에 담긴 모든 정보 끄집어내기
if(id.equals(mbr.getId())) { // id가 velog 와 같다면
isExist = true;
System.out.println(mbr); // id가 velog인 정보 출력
}
} // end of while(itr.hasNext())--------------------------
if(!isExist) // id가 velog와 같지 않다면
System.out.println
(">> 아이디가 " + id + "인 회원은 없습니다.");
Iterator<Member> itr = mbr_set.iterator();
while(itr.hasNext()) { // itr에 데이터가 존재하면 true
Member mbr = itr.next();
// itr에 담긴 모든 정보 끄집어내기
if("velog".equals(mbr.getId())) { // id가 velog 이면
itr.remove() // itr에 존재하는 데이터 삭제하기
}
} // end of while(it.hasNext())-----------------
my.day.18.a.collection -> HashMap_main_4, Set_main_5