https://youtu.be/el6cTtPHVRs?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
1. HashMap의 주요메서드
2.실습
[HashMap을 사용하여 id와 password를 key와 value를 사용해서 찾는 코드]
package javajungsuk;
import java.util.HashMap;
import java.util.Scanner;
public class Ex11_16 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("myId","1234");
map.put("asdf","1111");
map.put("asdf","1234");
Scanner s = new Scanner(System.in); // 화면으로부터 라인 단위로 입력 받는
while(true) {
System.out.println("id와 password를 입력해주세요.");
System.out.print("id :");
String id = s.nextLine().trim();
System.out.print("password : ");
String password = s.nextLine().trim(); //앞뒤공백제거
System.out.println();
if(!map.containsKey(id)) {
System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.");
continue;
}
if(!(map.get(id)).equals(password)) {
//get(id) --> 그 아이디에 해당하는 value를 반환
System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
} else {
System.out.println("id와 비밀번호가 일치합니다.");
break;
}
}
}
}
[ HashMap으로 총점, 평균, 최고점수, 최저점수 찾는 코드 ]
package javajungsuk;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Ex11_17 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("김자바",new Integer(90));
map.put("이자바",new Integer(100));
map.put("김자바",new Integer(100));
map.put("강자바",new Integer(90));
map.put("안자바",new Integer(80));
Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
System.out.println("이름 : "+ e.getKey()+", 점수 : "+e.getValue());
}
set = map.keySet();
System.out.println("참가자 명단: "+set);
Collection values = map.values();
it = values.iterator();
int total = 0;
while(it.hasNext()) {
int i = (int)it.next();
total += i;
}
System.out.println("총점 : "+total);
System.out.println("평균 : "+(float)total/set.size());
System.out.println("최고점수 : "+ Collections.max(values));
System.out.println("최저점수 : "+ Collections.min(values));
}
}
[HashMap을 이용해서 그래프를 표현해보기]
package javajungsuk;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.*;
public class Ex11_18 {
public static void main(String[] args) {
String[] data = {"A","K","A","K","D","K","A","K","K","K","Z","D"};
HashMap map = new HashMap();
for(int i = 0; i < data.length; i++) {
if (map.containsKey(data[i])) {
int value = (int)map.get(data[i]);
map.put(data[i],value+1);
} else { //key가 들어있지 않으면 그대로 ket 넣어주고 value 1로 넣어줌
map.put(data[i], 1);
}
}
Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
int value = (int)entry.getValue();
System.out.println(entry.getKey()+" : "+printBar("#",value)+" "+value);
}
}
public static String printBar(char ch, int value) {
char[] bar = new char[value];
for (int i = 0; i < bar.length; i++) {
bar[i]= ch;
}
return new String(bar);
}
}
3. 해싱(Hashing)이란?
- 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법으로 해시함수는 데이터가 저장되어 있는 곳을 알려주기 때문에 다량의 데이터 중에서도 원하는 데이터를 빠르게 찾을 수 있다.
- 이를 구현한(해싱을 구현한) 컬렉션 클래스로는
HashSet
,HashMap
,HashTable
등이 있다.
- 해싱에 사용하는 자료구조는 배열과
Linked List
의 조합으로 이루어져 있다. 저장할 데이터의 키를 해시함수에 넣으면 배열의 한 요소를 얻게 되고, 다시 그 곳에 연결되어 있는Linked List
에 저장하게 된다.
데이터를 찾는 과정은 아래와 같다.
- 검색하고자 하는 값의 키로 해시함수를 호출한다.
- 해시 함수의 결과인 해시코드를 이용해 해당 값이 저장되어 있는
Linked List
를 찾는다. Linked List
에서 검색하는 키와 일치하는 데이터를 찾는다.
'Java > 객체지향' 카테고리의 다른 글
[객체지향][제네릭스] - 24. 제니릭스란? (0) | 2022.02.14 |
---|---|
[객체지향][자바의 정석] - 23. Collections 클래스, 컬렉션 클래스 요약 (0) | 2022.02.13 |
[객체지향][자바의 정석] - 21. TreeSet (0) | 2022.02.03 |
[객체지향][자바의 정석] - 20. HashSet (0) | 2022.01.31 |
[객체지향][자바의 정석] - 19. Comparator과 Comparable (0) | 2022.01.31 |