国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA HashMap

vspiders / 2040人閱讀

摘要:采用鏈地址法來處理沖突這個就被賦值到里面去了。的應用非常廣泛,是新框架中用來代替的類,也就是說建議使用,不要使用的方法是同步的,未經同步直接使用對象的中數組默認大小是,增加的方式是。中數組的默認大小是,而且一定是的指數

Hashmap采用鏈地址法來處理沖突:

  void addEntry(int hash, K key, V value, int bucketIndex) {
        if ((size >= threshold) && (null != table[bucketIndex])) {
            resize(2 * table.length);
            hash = (null != key) ? hash(key) : 0;
            bucketIndex = indexFor(hash, table.length);
        }

        createEntry(hash, key, value, bucketIndex);
    }
   void createEntry(int hash, K key, V value, int bucketIndex) {
        Entry e = table[bucketIndex];
        table[bucketIndex] = new Entry<>(hash, key, value, e);
        size++;
    }
    

這個e就被賦值到next里面去了。
get的時候也是用鏈表來個get:

 final Entry getEntry(Object key) {
        if (size == 0) {
            return null;
        }

        int hash = (key == null) ? 0 : hash(key);
        for (Entry e = table[indexFor(hash, table.length)];
             e != null;
             e = e.next) { //注意這個大的for循環。循環一個鏈棧。next自然就在里面
            Object k;
            if (e.hash == hash &&
                ((k = e.key) == key || (key != null && key.equals(k))))
                return e;
        }
        return null;
    }

HashMap產生的原因是不同的key會產生相同的數組下標地址。數組下標地址里面存了鏈表。查詢的時候,先table[indexFor(hash, table.length)]找到數組下標,再根據key來尋找結果。
http://zhangshixi.iteye.com/blog/672697

什么是加載(裝載因子):
加載因子是表示Hsah表中元素的填滿的程度.若:加載因子越大,填滿的元素越多,好處是,空間利用率高了,但:沖突的機會加大了.反之,加載因子越小,填滿的元素越少,好處是:沖突的機會減小了,但:空間浪費多了.

沖突的機會越大,則查找的成本越高.反之,查找的成本越小.因而,查找時間就越小.

因此,必須在 "沖突的機會"與"空間利用率"之間尋找一種平衡與折衷. 這種平衡與折衷本質上是數據結構中有名的"時-空"矛盾的平衡與折衷.

loadfactor默認0.75,就是說差不多快滿(默認取3/4)的時候重新hash/resize,這樣可以避免hashmap里面每個table元素上的鏈表長度過長,影響hashmap的效率;
默認加載因子,加載因子是一個比例,當HashMap的數據大小>=容量*加載因子時,HashMap會將容量擴容
static final float DEFAULT_LOAD_FACTOR = 0.75f;
當實際數據大小超過threshold時,HashMap會將容量擴容,threshold=容量*加載因子
int threshold;
threshold是每次都要計算好的值。(擴容一次就計算一次)

HashMap本身存儲的也是數組。。
Hashtable的應用非常廣泛,HashMap是新框架中用來代替Hashtable的類,也就是說建議使用HashMap,不要使用Hashtable
1.Hashtable的方法是同步的,HashMap未經同步
2.Hashtable直接使用對象的hashCode
3.Hashtable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65309.html

相關文章

  • HashMap 和 Hashtable 的 6 個區別,最后一個沒幾個人知道!

    摘要:線程安全是線程安全的,不是線程安全的。是添加的,貌似沒人用過這個,棧長我也沒用過。。最后一點有幾個人知道知道的給棧長點個贊回應一下,不知道的有收獲的也點一個贊支持一下吧。 HashMap 和 Hashtable 是 Java 開發程序員必須要掌握的,也是在各種 Java 面試場合中必須會問到的。 但你對這兩者的區別了解有多少呢? 現在,棧長我給大家總結一下,或許有你不明朗的地方,在棧長...

    xiguadada 評論0 收藏0
  • HashMap ConcurrentHashMap

    摘要:與中的類似,也是一個數組加鏈表,不過這個線程安全。線程安全,但是它的線程安全是依賴將所有修改的代碼塊都用修飾。這是中實現線程安全的思路,由個組成,每個就相當于一個數組鏈表。線程安全,但性能差,不推薦使用。 問題描述 翻翻別人的面試經歷 這里在知乎上看到的,分享出了自己面試阿里Java崗的面試題。 showImg(https://segmentfault.com/img/bVbfSZ5?...

    forrest23 評論0 收藏0
  • javaHashMap和Hashtable的區別

    摘要:的函數都是同步的,這意味著它是線程安全的。直接使用對象的。是的輕量級實現非線程安全的實現都完成了接口,主要區別在于能否鍵對值能為。同時其內部方法有區別中將的方法去掉了,改為和避免混淆。支持的遍歷種類不同只支持迭代器遍歷。 java在數據結構中的映射定義了一個接口java.util.Map。 Map包含三個實現類HashMap、Hashtable、TreeMap。Map是用來存儲鍵對值 ...

    MudOnTire 評論0 收藏0
  • java中ConcurrentHashMap的使用及在Java 8中的沖突方案

    摘要:中的使用及在中的沖突方案引言簡稱是在作為的替代選擇新引入的,是包的重要成員。為了解決在頻繁沖突時性能降低的問題,中使用平衡樹來替代鏈表存儲沖突的元素。目前,只有和會在頻繁沖突的情況下使用平衡樹。 java中ConcurrentHashMap的使用及在Java 8中的沖突方案 1、引言 ConcurrentHashMap(簡稱CHM)是在Java 1.5作為Hashtable的替代選擇新...

    kun_jian 評論0 收藏0
  • Java 容器學習之 HashMap

    摘要:底層的數據結構就是數組鏈表紅黑樹,紅黑樹是在中加進來的。負載因子哈希表中的填滿程度。 前言 把 Java 容器的學習筆記放到 github 里了,還在更新~其他的目前不打算抽出來作為文章寫,感覺挖的還不夠深,等對某些東西理解的更深了再寫文章吧Java 容器目錄如下: Java 容器 一、概述 二、源碼學習 1. Map 1.1 HashMap 1.2 LinkedHashM...

    Alex 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<