枚舉

聲明:本欄目所使用的素材都是凱哥學(xué)堂VIP學(xué)員所寫,學(xué)員有權(quán)匿名,對(duì)文章有最終解釋權(quán);凱哥學(xué)堂 旨在促進(jìn)VIP學(xué)員互相學(xué)習(xí)的基礎(chǔ)上公開筆記。

集合框架

1.枚舉

枚舉也是在JDK1.5以后才出現(xiàn)的,泛型主要解決的是說(shuō)明一個(gè)集合里面存儲(chǔ)的是什么類型的對(duì)象的。那枚舉是用來(lái)干啥的呢?

枚舉在java中是專門用來(lái)做選擇的。先建好maven環(huán)境:

配置好的環(huán)境如上,我們回想一下Calendar類下的get方法,它的參數(shù)是int field,其實(shí)本意是要我們傳入年、月、日、時(shí)、分、秒這些參數(shù)從而來(lái)得到對(duì)應(yīng)的值的,但是它的參數(shù)的變量名field并沒有描述清楚這個(gè)參數(shù)到底該傳什么樣的值的,像這種整形的參數(shù)變量,描述含義不清楚的(不是weight、height、length之類的含義清晰的變量),我們不知道該傳入什么樣的參數(shù)值的時(shí)候,通常可以通過看這個(gè)類中定義了哪些常量,然后把類中定義的常量(常量標(biāo)示符表示某個(gè)int數(shù)值)作為參數(shù)值傳入,比如這里的get方法,就可以傳入Calendar.YEAR這樣的常量值,來(lái)得到年份。

但是最開始的時(shí)候我們并不知道這種int field的參數(shù)就應(yīng)該傳入類中定義的常量標(biāo)示符的,那么java中就推出了枚舉來(lái)解決這個(gè)問題。

枚舉是一個(gè)選擇器,比如你的方法的參數(shù)類型要限定在A/B/C/D/E/F這六個(gè)對(duì)象之間,你就可以定義一個(gè)枚舉選擇器Type,把A/B/C/D/E/F六個(gè)對(duì)象寫進(jìn)來(lái),然后在方法中的參數(shù)寫成Type t,當(dāng)使用方法的時(shí)候,一點(diǎn)到t上面就會(huì)知道這個(gè)參數(shù)是一個(gè)枚舉,同時(shí)知道了參數(shù)類型是在什么之間做選擇。如下:

如上,使用枚舉你就能很清楚的知道該傳入的參數(shù)在哪些對(duì)象之間做選擇,相反你如果寫int,同時(shí)變量名的表義又不清楚的話,是無(wú)法知道該傳入什么樣的參數(shù)值的。

那么我們方法的參數(shù)是枚舉的方法,我們就可以在方法里面做一些選擇的邏輯處理:

枚舉里面既可以寫構(gòu)造器也可以寫方法,構(gòu)造器必須是私有的,但是在枚舉里面寫構(gòu)造器和方法都是沒有實(shí)際意義的:

補(bǔ)充一個(gè)泛型的循環(huán):

這里的for-each循環(huán)實(shí)際上也就是迭代器做出來(lái)的。 Collections集合工具類:

認(rèn)識(shí)一下JDK API?

什么是API,就是java里面所有官方公布的操作類,和這些類里面的方法,和一些簡(jiǎn)單的小案例,是一個(gè)幫助、說(shuō)明文檔。

網(wǎng)上在線中文API ,百度輸入 JDK API

通常情況下拿API 來(lái)是為了看某個(gè)操作類下的一些方法,看它們是怎么使用的,用來(lái)完成什么樣的功能的。

Collections集合工具類:

Collections集合工具類里面的方法大部分都是針對(duì)List集合進(jìn)行相應(yīng)功能操作的:

1.混合打亂Collections.shuffle(List l);

這種打亂方法,每次運(yùn)行產(chǎn)生的結(jié)果都是不一樣的。 排序方法Collections.sort(List l):

其實(shí),上面的String為啥能夠直接進(jìn)行排序,是有原因的,那是因?yàn)镾tring里面實(shí)現(xiàn)了Comparable接口里面的CompareTo方法,所以才能夠直接進(jìn)行排序,我們自己定義一個(gè)student類,看看能否直接排序?

我們自己寫的類Student,最開始沒有實(shí)現(xiàn)Comparable接口,在使用sort方法來(lái)比較不同的student對(duì)象的時(shí)候會(huì)報(bào)錯(cuò),這是肯定的,因?yàn)槟銢]有實(shí)現(xiàn)Comparable的接口,它不知道按照什么東西來(lái)進(jìn)行比較,然后我們?nèi)?shí)現(xiàn)Comparable接口:

如上所示,我們的student類實(shí)現(xiàn)了Comparable接口后,重寫了compareTo方法,然后就可以使用sort方法來(lái)進(jìn)行直接排序了。

Collections.addAll批量的加入數(shù)據(jù):

Collections.replaceAll()替換集合里面的數(shù)據(jù):

Collections.binarySearch()搜索對(duì)象在哪個(gè)下標(biāo)下:

Collections.reverse()反轉(zhuǎn),將集合里面的對(duì)象反轉(zhuǎn)過來(lái):

Collections.fill()全部替換,將集合里面的對(duì)象全部替換為某個(gè)對(duì)象:

Collections.copy()拷貝,將一個(gè)集合的數(shù)據(jù)拷貝到另一個(gè)集合中,目標(biāo)集合的長(zhǎng)度至少要比源集合的長(zhǎng)度長(zhǎng),不然會(huì)報(bào)錯(cuò)。如果源集合長(zhǎng)度比目標(biāo)集合長(zhǎng)度短,則源集合里面的數(shù)據(jù)會(huì)覆蓋目標(biāo)集合里面前面部分的數(shù)據(jù):

還有很多方法,以后要用的時(shí)候可以參考JDK API文檔進(jìn)行查詢。

Map集合:雙列集合,一個(gè)主鍵一個(gè)值。又稱之為鍵值對(duì)集合,一個(gè)key 一個(gè)value。

鍵值對(duì)集合,鍵不可以重復(fù),值可以重復(fù),因?yàn)槲覀兊哪弥怠⒉橹怠h值都是根據(jù)主鍵來(lái)進(jìn)行的,如果你兩個(gè)或多個(gè)主鍵相同的話,就無(wú)法進(jìn)行拿值、查值、刪值等操作了。

Map集合的結(jié)構(gòu):下面有HashMap和Hashtable兩個(gè)集合,Map集合里面的主要方法如上: HashMap集合繼承于AbstractMap,然后AbstractMap實(shí)現(xiàn)了Map接口。 HashMap是非線程安全的,Hashtable是線程安全的。

HashMap的方法和Hashtable的方法是幾乎一樣的,只要看看HashMap里面的方法:

由上所示,當(dāng)多個(gè)主鍵一樣的時(shí)候,你去拿值的話,拿的是最后一個(gè)。

Hashtable的主鍵和值都不能是null。

而HashMap的主鍵或者值都可以是null。

拿出集合中的所有值,用到方法values(),返回值是一個(gè)Collection集合對(duì)象,然后用for-each循環(huán)把Collection集合里面的【學(xué)Java,到凱哥學(xué)堂kaige123.com】所有數(shù)據(jù)拿出來(lái),這里如果是HashMap集合的話,拿出來(lái)的數(shù)據(jù)是雜亂無(wú)序的,而如果是Hashtable的話,拿出來(lái)的數(shù)據(jù)是有順序的:

取出集合里面所有的鍵,用方法keySet(),這個(gè)方法的返回值是Set集合對(duì)象,然后使用for-each循環(huán)把Set集合里面的所有數(shù)據(jù)都取出來(lái)。

如上顯示,用HashMap的話取出來(lái)的鍵是雜亂無(wú)序的,而Hashtable取出來(lái)的鍵是有序的。 鍵-值一起拿方法entrySet(),它的返回值是一個(gè)Set,Set集合里面存放的是Entry實(shí)體,然后用for-each循環(huán)把集合里面所有的實(shí)體對(duì)象數(shù)據(jù)Entry拿出來(lái):

如上所示,HashMap拿出的鍵-值對(duì)無(wú)序,而Hashtable拿出來(lái)的有序。

還有size()、remove()、containsKey()、containsValue()、clear()等方法,使用如上。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,714評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,410評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,776評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,210評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,654評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,717評(píng)論 18 399
  • 2018-Read-Record 記錄我的2018學(xué)習(xí)歷程 譯者注:作為一個(gè)走心且有逼格的翻譯組,我們對(duì)本篇文章中...
    NinthDay閱讀 28,777評(píng)論 11 120
  • title: "Swift 中枚舉高級(jí)用法及實(shí)踐"date: 2015-11-20tags: [APPVENTUR...
    guoshengboy閱讀 2,604評(píng)論 0 2
  • 作者:Benedikt Terhechte,原文鏈接,原文日期:2015-10-17譯者:小鍋,pmst;校對(duì):s...
    梁杰_numbbbbb閱讀 937評(píng)論 1 11
  • 人不是被社會(huì)造就,而是人造就了社會(huì)。 如果你不能坦然面對(duì)社會(huì),還信誓旦旦的認(rèn)為是社會(huì)使自己埋沒,換個(gè)社會(huì)會(huì)很好。那...
    我愛吃芝麻閱讀 292評(píng)論 0 1