Collection
Collection在Java的基礎(chǔ)中是非常重要的部分,它占了一整個(gè)章節(jié),而Collection主要的內(nèi)容如下圖:
本文將介紹幾個(gè)比較重要而且常用的接口類型或者類。
List、ArrayList、linkedList
首先要講的是List、ArrayList、linkedList。大體上List這一類的Class,跟Array很類似,List上跟Array不同的是,Array需要提前知道長度,而List是不需要的。
而List是一個(gè)接口「Interface」,而ArrayList與linkedList是其實(shí)現(xiàn)類「Class」。所以通常聲明時(shí)這樣寫:
List<String>list=new ArrayList<String>();
ArrayList與linkedList的差別
ArrayList與linkedList都是List接口的實(shí)現(xiàn)類,所以List有的功能,ArrayList與linkedList全都實(shí)現(xiàn)了;而這二個(gè)List的差別在于,尋找下一節(jié)點(diǎn)的位置與切換下一個(gè)節(jié)點(diǎn)的位置。
假設(shè)現(xiàn)在有三個(gè)Object在heap中,利用ArrayList與linkedList分別來儲(chǔ)存,如下圖所示:
此時(shí)因?yàn)锳rrayList是照順序儲(chǔ)存的,所以在取得特定的index元素時(shí),非常方便快速,而linkedList在取得特定的index元素,因?yàn)橐粋€(gè)一個(gè)去取,所以會(huì)比較慢。
假設(shè)今天要插入第四個(gè)Object A,而且要接續(xù)在Object 1之后,所以會(huì)變成:
我們可以看到ArrayList的Object 2與Object 3都被移位了,而linkedList則是修改Object 1的指向,再由Object A的指向Object 2,所以修改了二個(gè)指向,就像指針一樣非常高效,如果List內(nèi)的數(shù)量很多,ArrayList會(huì)影響到被插入的index后的每一個(gè),而linkedList只會(huì)影響到二個(gè)。
結(jié)論
Set、HashSet、TreeSet
Set與List其實(shí)是很類似的東西,不過它們之間最大的區(qū)別在于,Set的元素不可以重復(fù),不過List可以。
下圖是一List與Set的示例代碼:
因?yàn)镾et具有不能重復(fù)的特性,而判斷重復(fù)的標(biāo)準(zhǔn)是根據(jù)Object的equals()來判斷;另外Set的內(nèi)容因?yàn)椴荒苤貜?fù),所以會(huì)有排序的問題,如果要考慮排序問題:
使用者自定義排序→TreeSet
快速取出→HashSet
TreeSet默認(rèn)為ASCII的方式排序,不過使用者也可以讓類實(shí)現(xiàn)java.lang.Comparable,自定義排序規(guī)則;而HashSet則是根據(jù)Object的hash()獲取的值來決定先后順序。
*注意:List在取出時(shí)是有順序的,但是Set在取出時(shí),是會(huì)根據(jù)排序后的順序,請注意,下圖是示例代碼:
Stack(先進(jìn)后出)與Queue(先進(jìn)先出)
Stack與List是很類似的東西,都是將一堆元素塞進(jìn)去里面后,再慢慢取出來;不過它們有Stack與Queue有它們自己的特性,Stack是先進(jìn)后出(LIFO),而Queue是先進(jìn)先出(FIFO),我們直接來看示例代碼:
下圖是Stack的示例:
下圖是Queue的示例:
Stack與Queue的peek()方法
Stack與Queue都是在取出元素后,就將該元素從Stack或Queue中移除了,所以為了應(yīng)對(duì)更多的情況,所以在Stack或Queue中都有提供對(duì)應(yīng)的方法peek(),這個(gè)方法取出來的元素與Stack的pop()與Queue的poll()是相同的,不過它不會(huì)將元素從Stack或Queue中移除,使用更加靈活。
Map、HashMap、TreeMap
Map是一種方便使用者儲(chǔ)放key、Value的一種集合,而且它也很接近Set與List的集合體,存儲(chǔ)key時(shí)使用Set,存儲(chǔ)Value時(shí)使用List。
Map的Key是使用Set的方式存儲(chǔ)的,所以Key是不能重復(fù)的,而Value是用List的方式存儲(chǔ),所以Value是可以重復(fù)的。
而Map中的Key因?yàn)槭褂肧et的方式存儲(chǔ),所以跟Set一樣,Set有HashSet、TreeSet,而Map則有HashMap與TreeMap,主要都是針對(duì)Key的部分。
Java中Collection集合概述:http://www.bjpowernode.com/tutorial_java_advance/633.html
以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“編程基礎(chǔ)入門,Java中collection接口”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。