java第五周周報

前言

本周是學(xué)習(xí)java的第五周守屉,粗略的學(xué)習(xí)了一下hashmap的底層實現(xiàn)原理惑艇。

參考教程:

W3Cschool

本周學(xué)習(xí)要點:

1.ArrayList在查詢較多時使用到,一般較多使用到它拇泛。

2.LinkList在增刪較多時使用到滨巴。

3.Vector線程安全,但相對的效率低俺叭,而且并不是安全就是好的恭取。

4.HashMap是鍵值對,是map接口的實現(xiàn)類熄守。put方法中蜈垮,鍵不能重復(fù),否則會覆蓋掉舊的裕照。

5.HashMap底層是結(jié)合數(shù)組和鏈表實現(xiàn)的攒发,具有數(shù)組的查詢快的優(yōu)點和鏈表的增加和刪除快的優(yōu)點

6.在jdk1.8版本后,java對HashMap做了改進(jìn)晋南,在鏈表長度大于8的時候惠猿,將后面的數(shù)據(jù)存在紅黑樹中,以加快檢索速度

7.<< >>相當(dāng)于對該數(shù)作乘或除2的操作负间,比使用符號運算速度快紊扬。

哈希表

也叫散列表,是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)唉擂。也就是說餐屎,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度玩祟。這個映射函數(shù)叫做散列函數(shù)腹缩,存放記錄的數(shù)組叫做散列表
給定表M空扎,存在函數(shù)f(key)藏鹊,對任意給定的關(guān)鍵字值key,代入函數(shù)后若能得到包含該關(guān)鍵字的記錄在表中的地址转锈,則稱表M為哈希(Hash)表盘寡,函數(shù)f(key)為哈希(Hash) 函數(shù)。
若關(guān)鍵字為k撮慨,則其值存放在f(k)的存儲位置上竿痰。由此脆粥,不需比較便可直接取得所查記錄。稱這個對應(yīng)關(guān)系f為散列函數(shù)影涉,按這個思想建立的表為散列表变隔。
對不同的關(guān)鍵字可能得到同一散列地址,即k1≠k2蟹倾,而f(k1)=f(k2)匣缘,這種現(xiàn)象稱為沖突(英語:Collision)。具有相同函數(shù)值的關(guān)鍵字對該散列函數(shù)來說稱做同義詞鲜棠。綜上所述肌厨,根據(jù)散列函數(shù)f(k)和處理沖突的方法將一組關(guān)鍵字映射到一個有限的連續(xù)的地址集(區(qū)間)上,并以關(guān)鍵字在地址集中的“像”作為記錄在表中的存儲位置豁陆,這種表便稱為散列表夏哭,這一映射過程稱為散列造表或散列,所得的存儲位置稱散列地址献联。
若對于關(guān)鍵字集合中的任一個關(guān)鍵字,經(jīng)散列函數(shù)映象到地址集合中任何一個地址的概率是相等的何址,則稱此類散列函數(shù)為均勻散列函數(shù)(Uniform Hash function)里逆,這就是使關(guān)鍵字經(jīng)過散列函數(shù)得到一個“隨機的地址”,從而減少沖突用爪≡海——百度百科

image.jpg

從圖片中很輕易看出來就是數(shù)組和鏈表的結(jié)合。
java中的hashmap會先定義一個node:

static class Node<K,V> implements Map.Entry<K,V> {
  final int hash;
  final K key;
  V value;
  Node<K,V> next;
}

它是Map.Entry接口的一個實現(xiàn)類偎血,其內(nèi)還有一些set诸衔,get方法和toString方法等等。然后就是數(shù)組颇玷,數(shù)組默認(rèn)是一個長度為16的數(shù)組笨农,當(dāng)其內(nèi)元素被占用超過0.75也就是12時,會擴容帖渠。對于鏈表谒亦,在鏈表長度大于8的時候,將后面的數(shù)據(jù)存在紅黑樹中空郊,紅黑樹的平均查找長度是log(n)份招,如果長度為8,平均查找長度為log(8)=3狞甚,鏈表的平均查找長度為n/2锁摔,當(dāng)長度為8時,平均查找長度為8/2=4哼审,這才有轉(zhuǎn)換成樹的必要谐腰;鏈表長度如果是小于等于6孕豹,6/2=3,而log(6)=2.6怔蚌,雖然速度也很快的巩步,但是轉(zhuǎn)化為樹結(jié)構(gòu)和生成樹的時間并不會太短。

哈希函數(shù)

在我目前理解中桦踊,java的hashmap中椅野,是將key的hashcode傳入后經(jīng)過哈希函數(shù)運算出一個數(shù)字作為該鍵值對在數(shù)組中的地址,當(dāng)數(shù)據(jù)量大時會產(chǎn)生沖突籍胯,一個均勻的哈希函數(shù)可以減少沖突但不能避免沖突竟闪,所以需要解決沖突的方法。

紅黑樹

紅黑樹就是一種平衡的二叉查找樹杖狼,說他平衡的意思是他不會變成“瘸子”炼蛤,左腿特別長或者右腿特別長。除了符合二叉查找樹的特性之外蝶涩,還具體下列的特性:

  1. 節(jié)點是紅色或者黑色
  2. 根節(jié)點是黑色
  3. 每個葉子的節(jié)點都是黑色的空節(jié)點(NULL)
  4. 每個紅色節(jié)點的兩個子節(jié)點都是黑色的理朋。
  5. 從任意節(jié)點到其每個葉子的所有路徑都包含相同的黑色節(jié)點。

其在c語言中的簡單定義如下:

#define RED        0    // 紅色節(jié)點
#define BLACK    1    // 黑色節(jié)點

typedef int Type;

// 紅黑樹的節(jié)點
typedef struct RBTreeNode{
    unsigned char color;        // 顏色(RED 或 BLACK)
    Type   key;                    // 關(guān)鍵字(鍵值)
    struct RBTreeNode *left;    // 左孩子
    struct RBTreeNode *right;    // 右孩子
    struct RBTreeNode *parent;    // 父結(jié)點
}Node, *RBTree;

// 紅黑樹的根
typedef struct rb_root{
    Node *node;
}RBRoot;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绿聘,一起剝皮案震驚了整個濱河市嗽上,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熄攘,老刑警劉巖兽愤,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挪圾,居然都是意外死亡浅萧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門哲思,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洼畅,“玉大人,你說我怎么就攤上這事棚赔⊥了迹” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵忆嗜,是天一觀的道長己儒。 經(jīng)常有香客問我,道長捆毫,這世上最難降的妖魔是什么闪湾? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮绩卤,結(jié)果婚禮上途样,老公的妹妹穿的比我還像新娘江醇。我一直安慰自己,他們只是感情好何暇,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布陶夜。 她就那樣靜靜地躺著,像睡著了一般裆站。 火紅的嫁衣襯著肌膚如雪条辟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天宏胯,我揣著相機與錄音羽嫡,去河邊找鬼。 笑死肩袍,一個胖子當(dāng)著我的面吹牛杭棵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氛赐,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼魂爪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艰管?” 一聲冷哼從身側(cè)響起滓侍,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛙婴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尔破,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡街图,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了懒构。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片餐济。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胆剧,靈堂內(nèi)的尸體忽然破棺而出絮姆,到底是詐尸還是另有隱情,我是刑警寧澤秩霍,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布篙悯,位于F島的核電站,受9級特大地震影響铃绒,放射性物質(zhì)發(fā)生泄漏鸽照。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一颠悬、第九天 我趴在偏房一處隱蔽的房頂上張望矮燎。 院中可真熱鬧定血,春花似錦、人聲如沸诞外。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峡谊。三九已至茫虽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間靖苇,已是汗流浹背席噩。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贤壁,地道東北人悼枢。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像脾拆,于是被迫代替她去往敵國和親馒索。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容