CF 11 HashMap,TreeMapクラス

40583 ワード


TreeMap

  • の範囲は、バイナリプローブツリーを使用するコレクションクラスの検索とソートに役立つ
  • である.
  • HashMapよりもデータの追加と削除に時間がかかります.
  • 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)
  • マッピングmをHashMapに変換した場合?
  • HashMap(int initialCapacity)
  • 初期容量:配列の長さ.初期容量
  • HashMap(int initialCapacity, float loadFactor)
  • loadFactor:容量はいつ提供されますか?
  • 方法


    追加

  • Object put(Object key, Object value)
  • オブジェクト鍵、一対の記憶値
  • void putAll(Map m)
  • は、指定されたマッピングm内のすべての要素(オブジェクト)
  • を格納する.

    削除

  • Object remove(Object key)
  • 指定鍵格納値(オブジェクト)
  • を削除する.
  • void clear()
  • 海図のすべてのオブジェクト
  • を削除

    変更

  • Object replace(Object key, Object value)
  • 指定キーの値(値)を指定するオブジェクト値
  • に置き換える.
  • boolean replace(Object key, Object oldValue, Object newValue)
  • で指定されたキーとオブジェクト(oldValue)が一致する場合にのみ、新しいオブジェクト(newValue)
  • に変更されます.
  • 指定オブジェクトキーの値oldValueを指定オブジェクトnewValue
  • に置き換える

    検索

  • ✨✨ Set entrySet()
  • (ハッシュ)マッピングに記憶するキーおよび値は、Map.Entry型オブジェクトであるデータセットに対して
  • を返す.
  • ✨✨ Set keySet()
  • (ハッシュ)マッピングに格納キーオブジェクトはすべてSetに格納され、
  • に戻る.
  • ✨✨ Collection values()
  • (ハッシュ)マッピングに格納されているすべての値オブジェクトをコレクション形式で返す
  • は、海図に記憶するすべての値
  • を集合的に返す.

    検索

  • boolean containsKey(Object key)
  • マッピングがオブジェクト鍵
  • を有するか否かを問い合わせる.
  • の場合true、またはfalse
  • boolean containsValue(Object value)
  • マッピングがオブジェクト値に対応する1つ以上のキー
  • を有するか否かを問い合わせる.
  • の場合true、またはfalse
  • 返却する

  • Object get(Object key)
  • の指定キーに対応する値オブジェクトを見つけ、
  • を返します.
  • が見つからない場合はnull
  • を返します.
  • Object getOrDefault(Object key, Object defaultValue)
  • は、指定キーの値(オブジェクト値)
  • を返す.
  • サブキーが見つからない場合は、->デフォルトデフォルトデフォルトdefaultValueで指定したオブジェクト
  • が返されます.

    その他

  • boolean isEmpty()
  • が空であるかどうかを確認します.空はtrue、満はfalse
  • int size()
  • が保存するオブジェクトの数
  • を返します.
  • Object clone()
  • コピー
  • キーワードマッチング後の値マッチング


    ex11_16
    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_18
    import 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

  • 生活コードJAVA 1
  • オブジェクト化の説明
  • w3schools JAVA
  • 羅東彬
  • ジャワけっしょうせき
  • ジャワ議政石羽バニラ
  • クラスとオブジェクト