🌱 오늘의 주제 : HashMap
🌱 HashMap
- key와 value을 묶어서 하나의 데이터(entry)로 저장하는 특징
- 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는데 뛰어난 성능을 가지고 있음.
- key는 유일해야 한다.
- 저장순서 유지하지 않는다.
- value는 중복을 허용한다.
key | value |
myId | 1234 |
asdf | 1234 |
🌱 HashMap의 메서드
🌱 HashMap 예제
package chapter11_p;
import java.util.HashMap;
import java.util.Scanner;
public class Ex11_16 {
public static void main(String[] args) {
// HashMap 예제1
HashMap map = new HashMap();
map.put("myId", "1234");
map.put("asdf", "1111");
map.put("asdf", "1234"); //이미 존재하는 키 추가 가능. 기존 값은 없어짐
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("id와 password를 입력해주세요");
System.out.print("id :");
String id = scan.nextLine().trim(); // trim : 앞 , 뒤 공백 제거
System.out.print("password : ");
String password = scan.nextLine().trim();
System.out.println();
if(!map.containsKey(id)) {
System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.");
continue;
}
if(!(map.get(id)).equals(password)) {
System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
} else {
System.out.println("id와 비밀번호가 일치합니다.");
break;
}
} // while
}
}
//-------
//id와 password를 입력해주세요
//id :asdf
//password : 1111
//
//비밀번호가 일치하지 않습니다. 다시 입력해주세요.
//id와 password를 입력해주세요
//id :asdf
//password : 1234
//
//id와 비밀번호가 일치합니다.
//
package chapter11_p;
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 예제2
HashMap map = new HashMap();
map.put("김자바", 90);
map.put("김자바", 100);
map.put("이자바", 100);
map.put("강자바", 80);
map.put("안자바", 90);
Set set = map.entrySet(); // entrySet() : 키와 값을 반환
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next(); // Map.Entry : Map인터페이스 안에 있는 Entry인터페이스.
System.out.println("이름 : " + e.getKey() + ", 점수 : " + e.getValue()); // getKey() : key 가져오기, getValue: value 가져오기.
}
set = map.keySet(); // .keySet() : 저장된 모든 키를 반환
System.out.println("참가자 명단 : " + set);
Collection values = map.values(); // .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)); // Collections : Collections 클래스
System.out.println("최저점수 : " + Collections.min(values));
}
}
//------
//이름 : 안자바, 점수 : 90
//이름 : 김자바, 점수 : 100
//이름 : 강자바, 점수 : 80
//이름 : 이자바, 점수 : 100
//참가자 명단 : [안자바, 김자바, 강자바, 이자바]
//총점 : 370
//평균 : 92.5
//최고점수 : 100
//최저점수 : 80
package chapter11_p;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Ex11_18 {
public static void main(String[] args) {
// HashMap 예제3
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]); // get(키) :키로 값을 얻어온다!
map.put(data[i], value +1); // 기존값에 1을 더해서 저장.
} else {
map.put(data[i], 1); // 기존에 없는 키는 값을 1로 저장.
}
}
Iterator it = map.entrySet().iterator(); // 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);
}
} // main
public static String printBar(char ch, int value) {
char[] bar = new char[value]; // value는 char배열의 개수
for(int i = 0; i < bar.length; i++) // value 개수만큼 #증가.
bar[i] = ch;
return new String(bar); // 문자열을 읽어올 수 있는 String 클래스
}
}
----
<결과>
A : ### 3
D : ## 2
Z : # 1
K : ###### 6
'Java' 카테고리의 다른 글
Java - Stack과 Queue (0) | 2023.02.09 |
---|---|
Java - 내부 클래스(inner class) (0) | 2023.02.07 |
Java - HashSet (0) | 2023.02.04 |
Java - Arrays의 메서드 (0) | 2023.02.04 |
Java - LinkedList (0) | 2023.02.03 |