HashMap,HashSet原理解析

  • 1.HashSet中的元素是如何保證不重複的?
    HashSet底部是封裝的一個hashmap,具體的步驟是 先通過hashcode比較,如果不相同則認爲不是同一個數據,如果Hashcode值 相同,再通過equals()方法進行比較,
    /**
    equlas()方法,string 類型的 比較
    instanceof :可以用來判斷繼承中的子類的實例是否爲父類的實現,左邊是子類,右邊是父類
    如果是自己覆寫equals()方法,應該使用getClass()代替 instanceof
    **/
    public boolean equals(Object anObject) {
    if (this == anObject) {
    return true;
    }
    if (anObject instanceof String) {
    String anotherString = (String)anObject;
    int n = value.length;
    if (n == anotherString.value.length) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = 0;
    //下面是進行內容比較
    while (n-- != 0) {
    if (v1[i] != v2[i])
    return false;
    i++;
    }
    return true;
    }
    }
    return false;
    }
  • 2.HashMap的get()方法的工作原理?
    HashMap的<K,V>在未進行顯示聲明時,V默認是Object;所以未聲明時,需要強轉.獲取值的時候,通過拿到key的hash值,確定bucket位置之後,之後會調用keys.equals()方法去找到鏈表中正確的節點,,最終找到要找的值對象;
  • 3.Hashmap的工作原理?
    HashMap基於hashing原理,我們通過put()和get()方法儲存和獲取對象。當我們將鍵值對傳遞給put()方法時,它調用鍵對象的hashCode()方法來計算hashcode,讓後找到bucket位置來儲存值對象。
    當獲取對象時,通過鍵對象的equals()方法找到正確的鍵值對,然後返回值對象。HashMap使用鏈表來解決碰撞問題,當發生碰撞了,對象將會儲存在鏈表的下一個節點中。
    HashMap在每個鏈表節點中儲存鍵值對對象。
  • 4.當兩個不同的鍵對象的hashcode相同時會發生什麼?
    答:它們會儲存在同一個bucket位置的鏈表中。鍵對象的equals()方法用來找到鍵值對。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章