CF 11 HashMap,TreeMapクラス
TreeMap
HashMap
Mapインタフェースを実装する典型的な集合クラス
ハッシュ・テクノロジーを使用してデータを格納します.データが多くて検索も早い.
キー&値(key&value)ペア=Entry[]としてデータを保存
反復順序X,反復(キーX,値O)
Hashmap(同期X)、HashTable(同期O、旧バージョン)の新バージョン
LinkedHashMap
クラスのメンテナンス手順を使用!ハッシュ
ハッシュ:ハッシュ関数を使用したデータの格納と取得
ハッシュ関数:keyが受信されると、ハッシュ関数はハッシュコードを通知します.
ハッシュコード:
例)患者情報管理(年代別に情報を区分した後、身分証明書番号が受信されると、ハッシュ関数が7のハッシュコードが表示されます.)
ハッシュ・テクノロジーを使用するクラス:HashTable、HashMap、HashSet
従って
hashcode()
hashcode()
overridingメソッド?: 💖💖
Objects.hash()
ハッシュ関数
ハッシュ関数:keyが受信されると、ハッシュ関数はハッシュコードを通知します.
:同じ鍵が受信されるたびに、同じハッシュコードが返されます.
:ハッシュ関数を使用してハッシュ・リストにデータを格納、検索
💖💖
Objects.hash()
を使用してhashcode()
をカバーします.ハッシュ表
ハッシュ・テーブルを保存および取得するプロセス
ちょぞう
HashMap map = new HashMap();
map.push("myID", "1234");
map.push("abcd", "1111");
map.push("abcd", "1234");
...
myID - 1234
abcd - 1234
map.push
検索
生成者
HashMap()
HashMap(Map m)
HashMap(int initialCapacity)
HashMap(int initialCapacity, float loadFactor)
方法
追加
Object put(Object key, Object value)
void putAll(Map m)
削除
Object remove(Object key)
void clear()
変更
Object replace(Object key, Object value)
boolean replace(Object key, Object oldValue, Object newValue)
検索
Set entrySet()
Map.Entry
型オブジェクトであるデータセットに対してSet keySet()
Collection values()
検索
boolean containsKey(Object key)
boolean containsValue(Object value)
返却する
Object get(Object key)
Object getOrDefault(Object key, Object defaultValue)
その他
boolean isEmpty()
int size()
Object clone()
キーワードマッチング後の値マッチング
ex11_16import 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");
System.out.println(map);
map.put("asdf", "1234");
System.out.println(map);
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("id와 password를 입력해주세요.");
System.out.print("id : ");
String id = sc.nextLine().trim(); //String 앞뒤 공백제거
System.out.print("password : ");
String password = sc.nextLine().trim();
//***key일치 확인 : equals가 아닌 containsKey!!
//boolean equals(Object o) 맵과 o과 같은지 비교 이므로 안됨!!
if(!map.containsKey(id)) {
System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.");
continue; //***반복문 끝으로 가고 다시 다음 반복으로
}
//*****key를 반환하고 난 다음에 해당 key의 짝꿍value비교!!!
//이럴땐 containsValue하면 안된다!!
//***value일치 확인 : key일치 확인 후 -> equals
if(!(map.get(id)).equals(password)) {
System.out.println("password가 일치하지 않습니다. 다시 입력해주세요.");
} else {
System.out.println("id와 password가 일치합니다.");
System.out.println("로그인 성공 ... WELCOME!!");
break; //반복문 나가기
}
}
}
}
ああああああああああ
コピー
ex11_17
Map & Iterator
mapで反復器を使用する方法 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(90));
System.out.println(map);
//***cf_06 iterator로 읽어오기
Set set = map.entrySet();
//***쌍으로
System.out.println(set);
Iterator it = set.iterator();
//아래는 위의 두줄을 줄인 것
//Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
//*****이거 잘 모르겠다. 묶음entry로 받아야하는데
//Map인터페이스 내부의 Entry인터페이스
//인터페이스안에 선언된 내부클래스나 인터페이스는 모두 static이라 바로 호출 가능
//이전에 list와set에선 : Object obj = it.next();이렇게 받았는데 얜 객체니까
//(Map.Entry)형변환이 필요하다.
Map.Entry e = (Map.Entry)it.next();
System.out.println("이름 : "+e.getKey()+", 점수 : "+e.getValue());
}
//***key들만
set = map.keySet();
System.out.println("참가자 명단 : "+set);
//***value들만(Collection)
Collection c = map.values();
System.out.println("점수 모음 : "+c);
it = c.iterator();
//아래는 위의 두줄을 줄인 것
//it = map.values().iterator();
int total = 0;
while(it.hasNext()) {
Integer i = (Integer) it.next();
//int i = (int)it.next(); 해도됨. 오토박싱
total = +i;
}
System.out.println("총점 : "+total);
System.out.println("평균 : "+(float)total/set.size());
System.out.println("최고점수 : "+Collections.max(c));
System.out.println("최저점수 : "+Collections.min(c));
//**위의 max(), min()은 Comparable구현한 클래스객체만 들어올 수 있다!
}
}
{안자바=90, 김자바=100, 강자바=90, 이자바=100}
[안자바=90, 김자바=100, 강자바=90, 이자바=100]
이름 : 안자바, 점수 : 90
이름 : 김자바, 점수 : 100
이름 : 강자바, 점수 : 90
이름 : 이자바, 점수 : 100
참가자 명단 : [안자바, 김자바, 강자바, 이자바]
점수 모음 : [90, 100, 90, 100]
총점 : 100
평균 : 25.0
최고점수 : 100
최저점수 : 90
ex11_18import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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]);
//get(Object key) : key에 대응하는 ***value반환이다***
//**** 있으면 +1
map.put(data[i], value+1);
}else {
map.put(data[i], 1);
}
}
//Set set = map.entrySet();
Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
int value = (int) e.getValue();
System.out.println(e.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);
//***String(char[] chArr) 라는 생성자가 있음!!!
}
}
A : ### 3
D : ## 2
Z : # 1
K : ###### 6
Ref
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");
System.out.println(map);
map.put("asdf", "1234");
System.out.println(map);
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("id와 password를 입력해주세요.");
System.out.print("id : ");
String id = sc.nextLine().trim(); //String 앞뒤 공백제거
System.out.print("password : ");
String password = sc.nextLine().trim();
//***key일치 확인 : equals가 아닌 containsKey!!
//boolean equals(Object o) 맵과 o과 같은지 비교 이므로 안됨!!
if(!map.containsKey(id)) {
System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요.");
continue; //***반복문 끝으로 가고 다시 다음 반복으로
}
//*****key를 반환하고 난 다음에 해당 key의 짝꿍value비교!!!
//이럴땐 containsValue하면 안된다!!
//***value일치 확인 : key일치 확인 후 -> equals
if(!(map.get(id)).equals(password)) {
System.out.println("password가 일치하지 않습니다. 다시 입력해주세요.");
} else {
System.out.println("id와 password가 일치합니다.");
System.out.println("로그인 성공 ... WELCOME!!");
break; //반복문 나가기
}
}
}
}
コピー
ex11_17
Map & Iterator
mapで反復器を使用する方法
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(90));
System.out.println(map);
//***cf_06 iterator로 읽어오기
Set set = map.entrySet();
//***쌍으로
System.out.println(set);
Iterator it = set.iterator();
//아래는 위의 두줄을 줄인 것
//Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
//*****이거 잘 모르겠다. 묶음entry로 받아야하는데
//Map인터페이스 내부의 Entry인터페이스
//인터페이스안에 선언된 내부클래스나 인터페이스는 모두 static이라 바로 호출 가능
//이전에 list와set에선 : Object obj = it.next();이렇게 받았는데 얜 객체니까
//(Map.Entry)형변환이 필요하다.
Map.Entry e = (Map.Entry)it.next();
System.out.println("이름 : "+e.getKey()+", 점수 : "+e.getValue());
}
//***key들만
set = map.keySet();
System.out.println("참가자 명단 : "+set);
//***value들만(Collection)
Collection c = map.values();
System.out.println("점수 모음 : "+c);
it = c.iterator();
//아래는 위의 두줄을 줄인 것
//it = map.values().iterator();
int total = 0;
while(it.hasNext()) {
Integer i = (Integer) it.next();
//int i = (int)it.next(); 해도됨. 오토박싱
total = +i;
}
System.out.println("총점 : "+total);
System.out.println("평균 : "+(float)total/set.size());
System.out.println("최고점수 : "+Collections.max(c));
System.out.println("최저점수 : "+Collections.min(c));
//**위의 max(), min()은 Comparable구현한 클래스객체만 들어올 수 있다!
}
}
{안자바=90, 김자바=100, 강자바=90, 이자바=100}
[안자바=90, 김자바=100, 강자바=90, 이자바=100]
이름 : 안자바, 점수 : 90
이름 : 김자바, 점수 : 100
이름 : 강자바, 점수 : 90
이름 : 이자바, 점수 : 100
참가자 명단 : [안자바, 김자바, 강자바, 이자바]
점수 모음 : [90, 100, 90, 100]
총점 : 100
평균 : 25.0
최고점수 : 100
최저점수 : 90
ex11_18import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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]);
//get(Object key) : key에 대응하는 ***value반환이다***
//**** 있으면 +1
map.put(data[i], value+1);
}else {
map.put(data[i], 1);
}
}
//Set set = map.entrySet();
Iterator it = map.entrySet().iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
int value = (int) e.getValue();
System.out.println(e.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);
//***String(char[] chArr) 라는 생성자가 있음!!!
}
}
A : ### 3
D : ## 2
Z : # 1
K : ###### 6
Ref
Reference
この問題について(CF 11 HashMap,TreeMapクラス), 我々は、より多くの情報をここで見つけました https://velog.io/@lecharl/CF11テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol