日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
為什么要使用集合框架?

題序:很多時(shí)候,我們專(zhuān)心研究一個(gè)東西的時(shí)候,往往忘記了我們最初的目的是什么。

10年積累的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶(hù)對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶(hù)得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有靜海免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

曾經(jīng)研究過(guò)那么久的Java集合框架,為了搞清里面的細(xì)節(jié),甚至都跑去重新買(mǎi)了一本數(shù)據(jù)結(jié)構(gòu),終于知道了線性表,知道了樹(shù),知道了查找表。也自己動(dòng)手實(shí)現(xiàn)了ArrayList,LinkedList,HashMap等。

今天在公交車(chē)上,突然想到“我們?yōu)槭裁匆褂肑ava集合框架呢?”竟然一時(shí)語(yǔ)塞,半天想不起來(lái),也說(shuō)不出個(gè)所以然呢。頓時(shí)悲從中來(lái)啊。還是決定再次好好復(fù)習(xí)一把,現(xiàn)總結(jié)如下:

PS.還是那句老話(huà),如果這些問(wèn)題您都能輕松解答,沒(méi)必要再浪費(fèi)時(shí)間看下去了。

Question one:我們?yōu)槭裁匆褂眉峡蚣?

Question two:關(guān)于ArrayList 和Vector (HashMap和HashTable)PS

Question three:總體把握,集合框架的繼承圖

Question four:set 于map的關(guān)系(見(jiàn)李興華書(shū))

Question five:關(guān)于set(底層實(shí)現(xiàn),關(guān)于TreeSet,關(guān)于排序,關(guān)于比較對(duì)象相等)

Question six: 已經(jīng)存在了那么多的動(dòng)態(tài)結(jié)構(gòu),為什么需要hash表?

Question seven:TreeMap 底層實(shí)現(xiàn)

Question One:我們?yōu)槭裁词褂眉峡蚣?

大家還記得我們?yōu)槭裁匆褂脭?shù)組嘛?

當(dāng)我們需要保持一組一樣(類(lèi)型相同)的元素的時(shí)候,我們應(yīng)該使用一個(gè)容器來(lái)保存,數(shù)組就是這樣一個(gè)容器。

那么,數(shù)組的缺點(diǎn)是什么呢?

數(shù)組一旦定義,長(zhǎng)度將不能再變化。

然而在我們的開(kāi)發(fā)實(shí)踐中,經(jīng)常需要保存一些變長(zhǎng)的數(shù)據(jù)集合,于是,我們需要一些能夠動(dòng)態(tài)增長(zhǎng)長(zhǎng)度的容器來(lái)保存我們的數(shù)據(jù)。

而我們需要對(duì)數(shù)據(jù)的保存的邏輯可能各種各樣,于是就有了各種各樣的數(shù)據(jù)結(jié)構(gòu)。我們將數(shù)據(jù)結(jié)構(gòu)在Java中實(shí)現(xiàn),于是就有了我們的集合框架。

Question Two: List和Vector,HashMap和 HashTable 的區(qū)別在哪里呢?

前者都是在JDK1.2后推出的,在前者中,因?yàn)椴捎卯惒教幚矸绞?,性能更高?/p>

(其實(shí)就是刪掉了后者中操作數(shù)據(jù){add ,remove等}時(shí)的線程同步鎖,這樣,效率更高了,但是卻不再是線程安全的了,要線程安全,必須用戶(hù)在程序中使用時(shí)自己控制。)

Question Three:集合框架繼承圖

本來(lái)想自己畫(huà)個(gè)簡(jiǎn)圖的,結(jié)果悲催的Rational Rose一直在抽風(fēng),也沒(méi)時(shí)間去弄那個(gè)了。就網(wǎng)上Down了一個(gè),暫且用著吧

從這個(gè)圖中,我們可以發(fā)現(xiàn):Collection 接口包括List和Set兩個(gè)子接口(其實(shí)還有Queue和Sorted兩個(gè)子接口)

另外,也驗(yàn)證了我們前面說(shuō)的,Array和Collection都是用來(lái)保存數(shù)據(jù)的容器。

Question Four:Set 和 Map 有什么關(guān)系?

從Question Three的繼承圖中,我們很明顯的發(fā)現(xiàn):Map雖然不像Set那樣屬 于 Collection,但是Set和Map的繼承圖是如此的相似。那么,他們之間到底有什么樣的 關(guān)系呢?

從邏輯上來(lái)說(shuō):首先,如果我們只考察Map中的key,那么顯然,這個(gè)key的集合就是一 個(gè)set:不能重復(fù),無(wú)序。(Map中有keyset()的方法,能直接得到key的set)另外一 個(gè)層面,如果我們 將Map中的key何value當(dāng)做一個(gè)整體,那么,顯然,這個(gè)時(shí)候 的Map其實(shí)就是一個(gè)Set(在Map的實(shí)現(xiàn)中,都是通過(guò)一個(gè)內(nèi)部類(lèi)來(lái)將key和value當(dāng)做 一個(gè)整體entity),

從代碼角度本身角度來(lái)看,無(wú)論是HashSet還是TreeSet其實(shí)使用的都是對(duì)應(yīng) 的Tree來(lái)實(shí)現(xiàn)的,我們用一個(gè)默認(rèn)的Object,這樣就可以存了。

而事實(shí)上Set的底層實(shí)現(xiàn)中,我們也可以發(fā)現(xiàn),都是用對(duì)應(yīng)的Map來(lái)實(shí)現(xiàn)的,只是,在每次存key-value 對(duì)的時(shí)候,都默認(rèn)給了一個(gè)Object 類(lèi)作為Value的默認(rèn)值,

Question five:關(guān)于set(底層實(shí)現(xiàn),關(guān)于TreeSet,關(guān)于排序,關(guān)于比較對(duì)象相等)

我們知道,Set是無(wú)序的,同時(shí)又是不能重復(fù)的,那么,這種不能重復(fù)性,是如何保證的呢? 其實(shí)這個(gè)問(wèn)題問(wèn)的還是不到位,Question Four已經(jīng)說(shuō)了,底層是由Map實(shí)現(xiàn)的,那么都是由Map來(lái)實(shí)現(xiàn)的。

為了唯一性,重點(diǎn)是能識(shí)別相同的元素(如何判斷相等)

在Java中,=號(hào),表示內(nèi)存地址相等,即是指向堆內(nèi)存的同一引用,那么此時(shí),顯然兩個(gè)元素是相等的。

當(dāng)不是指向堆內(nèi)存的同一引用時(shí)。我們就需要重寫(xiě)Object類(lèi)的equals()方法了。在此,我們判斷,如果我們需要比較的各個(gè)屬性相等的話(huà),那么則可認(rèn)為這兩個(gè)對(duì)象相等(關(guān)于屬性相等的比較與此類(lèi)似)

Question six: 已經(jīng)存在了那么多的動(dòng)態(tài)結(jié)構(gòu),為什么需要Hash表?

其實(shí)這個(gè)問(wèn)題其實(shí)問(wèn)的不恰當(dāng),應(yīng)該是,有了諸如順序表和有序表這樣的靜態(tài)表,諸如二叉排序樹(shù) 平衡二叉樹(shù)這樣的動(dòng)態(tài)表,為什么還需要Hash表呢?

因?yàn)橛涗浽诒碇械奈恢煤退年P(guān)鍵字之間不存在一個(gè)確定的關(guān)系。查找的過(guò)程為給定值依次和關(guān)鍵字集合中各個(gè)關(guān)鍵字進(jìn)行比較。查找的效率取決于和給定值進(jìn)行比較的關(guān)鍵字個(gè)數(shù)。

Question Seven: TreeMap 底層實(shí)現(xiàn)

TreeMap 底層由紅黑樹(shù)(Red-Black tree)實(shí)現(xiàn)。因?yàn)榇瞬糠謨?nèi)容包括算法分析,具體代碼實(shí)現(xiàn)以及性能分析,內(nèi)容比較多,所以本部分內(nèi)容稍后專(zhuān)門(mén)用一個(gè)日志來(lái)推出。(形式類(lèi)似HashMap那篇日志)


當(dāng)前文章:為什么要使用集合框架?
本文鏈接:http://www.5511xx.com/article/cdedcgj.html