9.1-全棧Java筆記: 容器&泛型—認(rèn)識(shí)Collection接口

開(kāi)發(fā)和學(xué)習(xí)中需要時(shí)刻和數(shù)據(jù)打交道尔邓,如果組織這些數(shù)據(jù)是我們編程中重要的內(nèi)容晾剖。?我們一般通過(guò)“容器”來(lái)容納和管理數(shù)據(jù)锉矢。

?

事實(shí)上,數(shù)組就是一種容器齿尽,可以在其中放置對(duì)象或基本類(lèi)型數(shù)據(jù)沽损。


數(shù)組的優(yōu)勢(shì):是一種簡(jiǎn)單的線性序列,可以快速的訪問(wèn)數(shù)組元素雕什,效率高缠俺。如果從效率和類(lèi)型檢查的角度講,數(shù)組是最好的贷岸。

數(shù)組的劣勢(shì):不靈活:容量事先定義好壹士,不能隨著需求的變化而擴(kuò)容。比如:我們?cè)谝粋€(gè)用戶管理系統(tǒng)中偿警,要把今天注冊(cè)的所有用戶取出來(lái)躏救,那么這個(gè)用戶有多少個(gè)?我們?cè)趯?xiě)程序時(shí)是無(wú)法確定的螟蒸。因此盒使,就不能使用數(shù)組。

?

因此七嫌,數(shù)組遠(yuǎn)遠(yuǎn)不能滿足我們對(duì)于“管理和組織數(shù)據(jù)的需求”少办。我們需要一種更強(qiáng)大、更靈活的诵原,容量隨時(shí)可擴(kuò)的容器來(lái)裝載我們的對(duì)象英妓。?這就是我們今天要學(xué)習(xí)的容器,或者叫集合绍赛。

?? ?圖1?容器中的接口層次結(jié)構(gòu)

泛型Generics

泛型是JDK5.0以后增加的蔓纠,他可以幫助我們建立類(lèi)型安全的集合。在使用了泛型的中吗蚌,不必進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換腿倚。JDK提供了支持泛型的編譯器,將運(yùn)行時(shí)的類(lèi)型檢查提前到了編譯時(shí)執(zhí)行蚯妇,使代碼可讀性和安全性更高敷燎。

泛型的本質(zhì)就是“數(shù)據(jù)類(lèi)型的參數(shù)化”。?我們可以把“泛型”理解為類(lèi)型的一個(gè)占位符(形式參數(shù))侮措,即告訴編譯器懈叹,在調(diào)用泛型時(shí)必須傳入實(shí)際類(lèi)型。

自定義泛型

我們可以在類(lèi)的聲明處增加泛型列表分扎,如:<T,E,V>澄成。?此處,字符可以是任何標(biāo)識(shí)符,一般采用這3個(gè)字母墨状。

【示例1】泛型類(lèi)的聲明

class?? MyCollection<E> {?

??? Object[]?objs?=?new?? Object[5];

????public?E? get(int?? index){

???????return?? (E)objs[index];

??? }


????public?void?? set(E e ,int?index){

???????objs[index] ? = e;

??? }

}

泛型E像一個(gè)占位符一樣表示“未知的某個(gè)數(shù)據(jù)類(lèi)型”卫漫,我們?cè)谡嬲{(diào)用的時(shí)候傳入這個(gè)“數(shù)據(jù)類(lèi)型”。

public?class?? TestGenerics {

????public?static?void?? main(String[] args) {

?????? MyCollection<String> mc =?new?? MyCollection<String>();

?????? mc.set("aaa", ? 0);

?????? mc.set("bbb", ? 1);

??? ??? String str = ? mc.get(1);??//由于加了泛型肾砂,直接返回的就是String類(lèi)型

? ? ? ?System.out.println(str);

??? }

}

容器中使用泛型

容器相關(guān)類(lèi)都定義了泛型列赎,我們?cè)陂_(kāi)發(fā)和工作中,在使用容器類(lèi)時(shí)都要使用泛型镐确。這樣包吝,在容器的存儲(chǔ)數(shù)據(jù)、讀取數(shù)據(jù)都避免了大量的類(lèi)型判斷源葫,非常便捷诗越。

【示例2】泛型的使用

public?static?void?main(String[] args) {

?????? List<String> list =?new?ArrayList<String>();

?????? Set<Man> mans =?new?HashSet<Man>();

?????? Map<Integer, Man> maps =?new?? HashMap<Integer, Man>();

?????? Iterator<Man> iterator = mans.iterator();

}

通過(guò)閱讀源碼,我們發(fā)現(xiàn)Collection息堂、List嚷狞、Set、Map荣堰、Iterator接口都定義了泛型:

因此床未,我們?cè)谑褂眠@些接口及其實(shí)現(xiàn)類(lèi)時(shí),都要使用泛型振坚。

菜鳥(niǎo)雷區(qū)

????我們只是強(qiáng)烈建議使用泛型薇搁。事實(shí)上,不使用編譯器也不會(huì)報(bào)錯(cuò)渡八!

Collection接口

Collection?表示一組對(duì)象只酥,它是集中、收集的意思呀狼。Collection接口的兩個(gè)子接口是List、Set接口损离。

Collection接口中定義的方法

方法

說(shuō)明

boolean? ? add(Object element)

增加元素到容器中

boolean? ? remove(Object element)

從容器中移除元素

boolean? ? contains(Object element)

容器中是否包含該元素

int??? ? size()

容器中元素的數(shù)量

boolean? ? isEmpty()

容器是否為空

void? ? clear()

清空容器中所有元素

Iterator? ? iterator()

獲得迭代器哥艇,用于遍歷所有元素

boolean containsAll(Collection c)

本容器是否包含c容器所有元素

boolean? ? addAll(Collection c)

將容器c中所有元素增加到本容器

boolean? ??removeAll(Collection c)

移除本容器和容器C中都包含的元素

boolean? ? retainAll(Collection c)

取本容器和容器C中都包含的元素,移除非交集元素

Object[] toArray()

轉(zhuǎn)化成Object數(shù)組

由于List僻澎、Set是Collection的子接口貌踏,意味著所有List、Set的實(shí)現(xiàn)類(lèi)都有上面的方法窟勃。我們下一節(jié)中祖乳,通過(guò)ArrayList實(shí)現(xiàn)類(lèi)來(lái)測(cè)試上面的方法。





「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記秉氧。筆者江湖人稱 Mr. G眷昆,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作亚斋,從小白逐漸做到工程師作媚、高級(jí)工程師、架構(gòu)師帅刊。精通Java平臺(tái)軟件開(kāi)發(fā)纸泡,精通JAVAEE,熟悉各種流行開(kāi)發(fā)框架赖瞒。


筆記包含從淺入深的六大部分:

A-Java入門(mén)階段

B-數(shù)據(jù)庫(kù)從入門(mén)到精通

C-手刃移動(dòng)前端和Web前端

D-J2EE從了解到實(shí)戰(zhàn)

E-Java高級(jí)框架精解

F-Linux和Hadoop?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末女揭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子栏饮,更是在濱河造成了極大的恐慌吧兔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抡爹,死亡現(xiàn)場(chǎng)離奇詭異掩驱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)冬竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)欧穴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人泵殴,你說(shuō)我怎么就攤上這事涮帘。” “怎么了笑诅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵调缨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吆你,道長(zhǎng)弦叶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任妇多,我火速辦了婚禮伤哺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘者祖。我一直安慰自己立莉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布七问。 她就那樣靜靜地躺著蜓耻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪械巡。 梳的紋絲不亂的頭發(fā)上刹淌,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天饶氏,我揣著相機(jī)與錄音,去河邊找鬼芦鳍。 笑死嚷往,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柠衅。 我是一名探鬼主播皮仁,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菲宴!你這毒婦竟也來(lái)了贷祈?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喝峦,失蹤者是張志新(化名)和其女友劉穎势誊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谣蠢,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粟耻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眉踱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挤忙。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谈喳,靈堂內(nèi)的尸體忽然破棺而出册烈,到底是詐尸還是另有隱情,我是刑警寧澤婿禽,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布赏僧,位于F島的核電站,受9級(jí)特大地震影響扭倾,放射性物質(zhì)發(fā)生泄漏淀零。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一膛壹、第九天 我趴在偏房一處隱蔽的房頂上張望窑滞。 院中可真熱鬧,春花似錦恢筝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至趾撵,卻和暖如春侄柔,著一層夾襖步出監(jiān)牢的瞬間共啃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工暂题, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留移剪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓薪者,卻偏偏與公主長(zhǎng)得像纵苛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子言津,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法攻人,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法悬槽,繼承相關(guān)的語(yǔ)法怀吻,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,625評(píng)論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等初婆,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,497評(píng)論 0 3
  • 對(duì)象的創(chuàng)建與銷(xiāo)毀 Item 1: 使用static工廠方法蓬坡,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法,并非Fa...
    孫小磊閱讀 1,982評(píng)論 0 3
  • 在經(jīng)過(guò)一次沒(méi)有準(zhǔn)備的面試后磅叛,發(fā)現(xiàn)自己雖然寫(xiě)了兩年的android代碼屑咳,基礎(chǔ)知識(shí)卻忘的差不多了。這是程序員的大忌宪躯,沒(méi)...
    猿來(lái)如癡閱讀 2,839評(píng)論 3 10
  • 天陰沉沉的蓋了下來(lái)乔宿。 仰望天空,黑壓壓的烏云聚攏在一起访雪,那道讓灰蒙蒙的天空霎那變得似白晝的閃電详瑞,像是樂(lè)章的指揮員一...
    小伊森閱讀 295評(píng)論 2 5