java中的數(shù)據(jù)結(jié)構(gòu)

前言

之前遇到一個(gè)問題枣申,具體是說: 當(dāng)我們用HashMap的時(shí)候茂契,是怎樣考慮優(yōu)化其性能的呢屡久?當(dāng)時(shí)就一臉懵逼忆首,原來是因?yàn)閔ashmap的自動(dòng)擴(kuò)容影響了性能,后面查資料才知道被环,可以通過設(shè)置hashmap的合理的初始容量或者加載因子來優(yōu)化糙及。 工作了一段時(shí)間了,連這個(gè)都不知道表示很羞愧筛欢。然后就去查看了一些關(guān)于數(shù)據(jù)結(jié)構(gòu)的知識(shí)浸锨。其實(shí)也常常聽說數(shù)據(jù)結(jié)構(gòu)包括鏈表唇聘,隊(duì)列,棧揣钦,樹和二叉樹雳灾,圖等。但是在java中具體的應(yīng)用有哪些呢冯凹?抱著一種好奇的心態(tài)去整列了一下java中的數(shù)據(jù)結(jié)構(gòu)谎亩。

大概整理如下圖
大概結(jié)構(gòu)圖

我在開發(fā)過程中用的最多的就屬hashmap和arrayList。樹和二叉樹看了很久還是不明所以宇姚,后面再逐步修改吧匈庭。

線性表

  • linkedList 就是基于雙向鏈表的結(jié)構(gòu)其插入,刪除浑劳,新增的性能強(qiáng)于arrayList阱持。因?yàn)閍rrayList本質(zhì)就是數(shù)組,其需要的內(nèi)存空間必須是連續(xù)的,所以當(dāng)需要插入一條數(shù)據(jù)時(shí)魔熏,若在末端增加數(shù)據(jù)衷咽,其性能消耗也還好,但是若在任意位置插入就需移動(dòng)數(shù)據(jù)的位置蒜绽。linkedList 需要的內(nèi)存空間可以不連續(xù)镶骗,插入數(shù)據(jù)時(shí)只需要改變節(jié)點(diǎn)的prev和next的指向就行了。
  • linkedList 隨機(jī)訪問get和set就沒有arrayList快了躲雅。linkedList需要移動(dòng)指針鼎姊。
  • 棧 先進(jìn)后出,java中vector 是棧的應(yīng)用相赁,其線程安全相寇,性能差。其實(shí)現(xiàn)類是stack類
  • 隊(duì)列 先進(jìn)先出钮科,java中的Queue是和List一樣繼承于collection唤衫。上圖用鏈表實(shí)現(xiàn)隊(duì)列的方法是用C語言實(shí)現(xiàn),隊(duì)列最常見的應(yīng)用就是異步消息绵脯,日志等战授,如Android中的handler的messageQueue。

hash表(散列表)

java中的Map桨嫁。其中的實(shí)線類有 HashTable,HashMap份帐,WeakHashMap.其中weakhashMap是一種對(duì)key 弱引用map璃吧。寫到這里就想起了hashmap的原理以及hashmap與hashset的區(qū)別等,然后可以參看hashmap的原理

  • hashTable 不允許null key和null value废境,線程安全畜挨,單線程操作性能差筒繁。 通過initial capacity和load factor兩個(gè)參數(shù)調(diào)整性能。通常缺省的load factor 0.75較好地實(shí)現(xiàn)了時(shí)間和空間的均衡巴元。增大load factor可以節(jié)省空間但相應(yīng)的查找時(shí)間將增大毡咏,這會(huì)影響像get和put這樣的操作。
  • hashmap 允許null key和null value 但是是異步的逮刨,所以線程不安全呕缭。將HashMap視為Collection時(shí)(values()方法可返回Collection),其迭代子操作時(shí)間開銷和HashMap的容量成比例修己。因此恢总,如果迭代操作的性能相當(dāng)重要的話,不要將HashMap的初始化容量設(shè)得過高睬愤,或者load factor過低片仿。

樹和二叉樹

樹是一種非線性結(jié)構(gòu),二叉樹為度為2的樹形結(jié)構(gòu)尤辱,分為左子樹和右子樹砂豌。
二叉樹概念以及存儲(chǔ)結(jié)構(gòu)--51CTO

  • 葉結(jié)點(diǎn)(Leaf):度為0的結(jié)點(diǎn);
  • 路徑和路徑長(zhǎng)度:從結(jié)點(diǎn)n1到nk的路徑為一個(gè)結(jié)點(diǎn)序列n1光督,n2阳距,...,nk可帽。ni是ni+1的父結(jié)點(diǎn)娄涩。路徑所包含邊的個(gè)數(shù)為路徑的長(zhǎng)度;
  • 結(jié)點(diǎn)的層次(Level):規(guī)定根結(jié)點(diǎn)在1層映跟,其他任一結(jié)點(diǎn)的層數(shù)是其父結(jié)點(diǎn)的層數(shù)加1
  • 樹的深度(Depth):樹中所有結(jié)點(diǎn)中的最大層次是這棵樹的深度蓄拣;

圖(Graph)是由頂點(diǎn)的有窮非空集合和頂點(diǎn)之間邊的集合組成,通常表示為:G(V努隙,E)球恤,其中,G表示一個(gè)圖荸镊,V是圖G中頂點(diǎn)的集合咽斧,E是圖G中邊的集合。在圖中的數(shù)據(jù)元素躬存,我們稱之為頂點(diǎn)(Vertex)张惹,頂點(diǎn)集合有窮非空。在圖中岭洲,任意兩個(gè)頂點(diǎn)之間都可能有關(guān)系宛逗,頂點(diǎn)之間的邏輯關(guān)系用邊來表示,邊集可以是空的盾剩。圖的詳解

樹和圖都沒有接觸過雷激,目前還不知道java中的應(yīng)用替蔬。
嘗試整理文章,每天進(jìn)步一丟丟屎暇,嘻嘻承桥。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市根悼,隨后出現(xiàn)的幾起案子凶异,更是在濱河造成了極大的恐慌,老刑警劉巖番挺,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唠帝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玄柏,警方通過查閱死者的電腦和手機(jī)襟衰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粪摘,“玉大人瀑晒,你說我怎么就攤上這事∨且猓” “怎么了苔悦?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)椎咧。 經(jīng)常有香客問我玖详,道長(zhǎng),這世上最難降的妖魔是什么勤讽? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任蟋座,我火速辦了婚禮,結(jié)果婚禮上脚牍,老公的妹妹穿的比我還像新娘向臀。我一直安慰自己,他們只是感情好诸狭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布券膀。 她就那樣靜靜地躺著,像睡著了一般驯遇。 火紅的嫁衣襯著肌膚如雪芹彬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天叉庐,我揣著相機(jī)與錄音舒帮,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛会前,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匾竿,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼瓦宜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了岭妖?” 一聲冷哼從身側(cè)響起临庇,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昵慌,沒想到半個(gè)月后假夺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斋攀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年已卷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淳蔼。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侧蘸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹉梨,到底是詐尸還是另有隱情讳癌,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布存皂,位于F島的核電站晌坤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旦袋。R本人自食惡果不足惜骤菠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜憎。 院中可真熱鬧娩怎,春花似錦、人聲如沸胰柑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柬讨。三九已至崩瓤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踩官,已是汗流浹背却桶。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颖系。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓嗅剖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親嘁扼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子信粮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • 在一個(gè)方法內(nèi)部定義的變量都存儲(chǔ)在棧中,當(dāng)這個(gè)函數(shù)運(yùn)行結(jié)束后趁啸,其對(duì)應(yīng)的棧就會(huì)被回收强缘,此時(shí),在其方法體中定義的變量將不...
    Y了個(gè)J閱讀 4,413評(píng)論 1 14
  • 1. 總體來說 java中主要的集合接口有Collection不傅、Map旅掂。Collection有一個(gè)父接口,Coll...
    只道初見閱讀 1,449評(píng)論 0 0
  • collection接口 List接口 ArrayList是數(shù)組結(jié)構(gòu)访娶,長(zhǎng)度可變商虐,在add的時(shí)候,會(huì)比較前數(shù)組的長(zhǎng)度...
    山楂mm閱讀 161評(píng)論 0 0
  • 一震肮、名詞解釋 1.隱含的讀者 是德國接受美學(xué)家伊瑟爾20世紀(jì)60年代末提出的一個(gè)重要概念称龙,它對(duì)主導(dǎo)西方文論界達(dá)半個(gè)...
    尼采在芝華塔尼歐閱讀 2,697評(píng)論 2 17
  • 什么是閉包 一種寫法 在函數(shù)定義處的環(huán)境中自帶數(shù)據(jù) 一種為局部定義函數(shù)封裝信息的方式 參考 閉包熱身 普通循環(huán) 延...
    coolheadedY閱讀 296評(píng)論 0 0