第四篇:Kotlin之?dāng)?shù)組和集合

上篇:第三篇:Kotlin之流程控制

下篇:第五篇:Kotlin之函數(shù)和Lambda表達(dá)式

一.Kotlin數(shù)組

? ? kotlin為數(shù)組增加了一個(gè)Array類禁漓,為元素是基本類型的數(shù)組增加了xxArray類(其中xx也就是Byte蜒犯,Short, Int等基本類型)

Kotlin創(chuàng)建數(shù)組大致有如下兩種方式:

1.使用arrayOf(), arrayOfNulls(),emptyArray()工具函數(shù)端姚。

2.使用Array(size: Int, init:(Int) -> T)

首先先介紹第一種

Array第二種用到了函數(shù)的知識(shí)设褐,本來想到函數(shù)的到后面函數(shù)那個(gè)章節(jié)在講,不過怕忘了泡挺,就先簡(jiǎn)單的說說吧辈讶。

Array(size: Int, ?init: (Int) -> T) 第一個(gè)參數(shù)就是對(duì)數(shù)組設(shè)置的大小很好理解。那么第二個(gè)參數(shù)是什么娄猫。 其實(shí)在kotlin里中參數(shù)也可以定義某個(gè)方法的類型的贱除。哇生闲,感覺很神奇吧!我們?cè)趯慾ava的時(shí)候基本上就是參數(shù)要不傳普通類型要不就是對(duì)象類型月幌,沒有聽說過可以傳方法類型的碍讯。 因?yàn)樵趉otlin里中方法其實(shí)也是有類型的。所以第二個(gè)參數(shù) init:(Int) -> T 代表這這個(gè)方法返回的類型是T只能有一個(gè)參數(shù)類型是Int型扯躺。雖然沒有看源碼捉兴,但是從它的字面是就可以看出這個(gè)參數(shù)其實(shí)就是對(duì)array的每個(gè)索引進(jìn)行初始化的。Int就是該array的所對(duì)應(yīng)的索引录语。下面看一下這個(gè)代碼:

看過我以前的文章的朋友應(yīng)該知道這個(gè)it代表什么了吧倍啥,就是代表(Int)的參數(shù)傳入的值,也就是array的下標(biāo)的索引澎埠。arrayInit的結(jié)果就是每個(gè)下標(biāo)的索引所對(duì)應(yīng)的值為下標(biāo)索引 * 2虽缕, arrayInitTwo下標(biāo)索引對(duì)應(yīng)的值就是索引值。在接下來的Kotlin值函數(shù)的文章中我會(huì)具體講講kotlin函數(shù)的用法蒲稳。

其實(shí)有些朋友也許會(huì)有這樣的疑慮彼宠,為什么在寫數(shù)組的時(shí)候有的時(shí)候需要指定泛型,有的時(shí)候不需要呢弟塞。其實(shí)你記住一點(diǎn)就可以了凭峡,在初始化的時(shí)候如果你是已經(jīng)將參數(shù)寫進(jìn)去了,kotlin用自動(dòng)識(shí)別的就不需要指定泛型了决记,如果只是指定大小沒有寫入?yún)?shù)的話摧冀。因?yàn)閗otlin不知道需要什么類型,所以需要指定泛型系宫。kotlin還提供了一個(gè)emptyArray()函數(shù)索昂,用法基本一致,這種方式創(chuàng)建了一個(gè)長(zhǎng)度為0的空數(shù)組扩借。

如果細(xì)心的朋友應(yīng)該注意到椒惨,我在寫kotlin數(shù)組的時(shí)候,取值或者賦值也用到了get潮罪,set方法康谆。所以koltin中不只有集合可以用,數(shù)組也可以用嫉到。 遍歷數(shù)組用 for in就好沃暗。

kotlin里數(shù)組提供了很多工具方法,例如

asList() 將該數(shù)組轉(zhuǎn)成list的集合何恶。

arr.all({it > 20}) 判斷是否數(shù)組里的值都大于20孽锥,如果是返回true,不是返回false

arr.any({it > 20})判斷是否數(shù)組里的值其中有一個(gè)大于20,如果是返回true惜辑,不是返回false

根據(jù)數(shù)組元素來計(jì)算<k, V>對(duì)唬涧,返回所有的<k, V>對(duì)組成的Map集合。例如 k + 2盛撑, v + 10

var arrMap = arr.associate({it + 2 to it + 10})

將數(shù)組arr的第5個(gè)元素(包括)到底7個(gè)元素(不包括)賦值為1

arr.fill(1, 4, 6)

還有很多工具方法碎节,可以去kotlin官方查看,在這里我就不一一列舉啦撵彻。還有多維數(shù)組钓株,跟java的多維數(shù)組一樣实牡。


2.Kotlin集合

kotlin集合類同樣有兩個(gè)接口派生:Collection和Map陌僵。但Kotlin的結(jié)合被分成兩個(gè)大類,可變集合和不可變集合创坞。只有可變集合才可以添加修改碗短,刪除等處理操作。不可變集合只能讀取元素题涨。

上圖為kotlin提供的集合偎谁,通過上圖可以看出kotlin的集合實(shí)現(xiàn)類比java更少,他只是提供了HashSet纲堵, LinkedHashSet巡雨, ArrayList這三個(gè)常見的實(shí)現(xiàn)類,如果開發(fā)者需要使用TreeSet席函, LinkedList集合實(shí)現(xiàn)類依然可以使用java集合框架提供的類铐望。

縱觀Kotlin集合體系,不難發(fā)現(xiàn)kotlin只提供了HashSet茂附,HashMap正蛙, LinkedHashSet, LinkedHashMap营曼, ArrayList這5個(gè)集合實(shí)現(xiàn)類乒验,而且他們都是可變集合,那么說好的不可變集合呢蒂阱。kotlin的不可變集合類并沒有暴露出來锻全,我們只能通過函數(shù)來創(chuàng)建不可變集合。

set集合录煤,Kotlin提供了如下函數(shù)來創(chuàng)建Set集合

setOf();該函數(shù)返回不可變的Set集合虱痕,該集合可以接收0個(gè)或過個(gè)參數(shù),這些參數(shù)將作為集合的元素辐赞。

mutableSet0f():該函數(shù)返回可變的MutableSet集合部翘,

hashSetOf():該函數(shù)返回可變的HashSet集合,

linkedSetOf():該函數(shù)返回可變的LinkedHashSet集合响委。

sortedSetOf():該函數(shù)返回可變的TreeSet集合, 用法同下新思。

在kotlin1.1的時(shí)候setof返回的類型就是linkedHashset窖梁。 setof, linkedSetOf是有序的夹囚, hashSetOf和sortedSetOf是無序的纵刘。 所以好多朋友都是set是無序的,我感覺這樣說很片面荸哟。

set集合的工具方法里有

all假哎, any, associateBy 和數(shù)組的一樣鞍历,用法也一樣就不解釋了舵抹。

set.drop(2) 返回刪除set集合前面兩個(gè)元素后的集合。

set.filter({"java" in it}) ?對(duì)set集合進(jìn)行過濾劣砍,返回包含java的集合惧蛹。

set.find({"java" in it}) 如果集合里元素有可以包含java的返回true,否者返回false

set.add; ? set.remove; ?set.clear ...跟java一樣刑枝。(set集合不允許重復(fù)香嗓,java也是一樣)

還有去兩個(gè)集合的交集,并集等等装畅。方法還有很多靠娱。如有興趣請(qǐng)查看kotlin官網(wǎng)。

list集合掠兄,Kotlin提供了如下函數(shù)來創(chuàng)建list集合

listOf(); 返回不可變的集合

listOfNull(); 返回不可變集合像云,和前一個(gè)函數(shù)的唯一的區(qū)別是,該函數(shù)會(huì)自動(dòng)去掉傳入的null徽千,也就是說返回的時(shí)候不會(huì)返回null苫费,會(huì)過濾掉。

mutableListOf(); 該函數(shù)返回可變的MutableListOf()集合

第一個(gè)listOf實(shí)際上返回的是ArrayList

使用list的方法:

list.indexOf("java")取得坐標(biāo)的位置双抽。

list.subList 返回List的子集合百框。list.subList(1, 3) 包含1不包含3

工具類和set很相似,具體的可以自己嘗試一下牍汹。

Map集合

mapOf(); 該函數(shù)返回不可變的Map集合铐维。

mutableMapOf(); 該函數(shù)返回可變的MutableMap集合。

其實(shí)mapOf() 返回的是LinkedHashMap()慎菲。

hashMapOf(); 返回可變的HashMap()集合隧膘。

linkedMapOf(); 返回可變的LinkedHashMap集合辫狼。

Kotlin為Map集合同樣擴(kuò)展大量方法桦锄,這些方法與Kotlin為Set集合提供的方法也大致相似乍惊。卻別就是對(duì)key-value進(jìn)行了調(diào)整。?

map.all({it.key.length > 5 && it.value.length > 5})

map.filter({"java" in it.value}) ? 。抑党。

對(duì)于map的添加刪除和java一樣 put包警, remove。我就不舉例子了底靠。

遍歷map

for(en in map.entries) {}

for(key in map.keys) {}

for(value in map.value) {}

map還可以用map[key] = value,來代替map.put("key", value)

? ? 到這里kotlin的數(shù)組和集合基本的用法基本上講完了害晦,其實(shí)和java的數(shù)組和集合基本相似,就是多了一些可變集合和不可變集合暑中,以及提供的方法更多了一些壹瘟,方便我們開發(fā)。其實(shí)kotlin自己并沒有實(shí)現(xiàn)任何集合與數(shù)組都是調(diào)用java的鳄逾。所以對(duì)于最求性能的開發(fā)者來說完全可以按照java的結(jié)合的每個(gè)的優(yōu)點(diǎn)缺點(diǎn)來調(diào)用就好稻轨。

?感覺還不錯(cuò)的小伙伴記得點(diǎn)贊或者關(guān)注啊~~~ ?下一篇函數(shù)和lambda表達(dá)式會(huì)近期更新。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末严衬,一起剝皮案震驚了整個(gè)濱河市澄者,隨后出現(xiàn)的幾起案子笆呆,更是在濱河造成了極大的恐慌请琳,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赠幕,死亡現(xiàn)場(chǎng)離奇詭異俄精,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)榕堰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門竖慧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逆屡,你說我怎么就攤上這事圾旨。” “怎么了魏蔗?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵砍的,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我莺治,道長(zhǎng)廓鞠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任谣旁,我火速辦了婚禮床佳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榄审。我一直安慰自己砌们,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪感,像睡著了一般角溃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篮撑,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天减细,我揣著相機(jī)與錄音,去河邊找鬼赢笨。 笑死未蝌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茧妒。 我是一名探鬼主播萧吠,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼桐筏!你這毒婦竟也來了纸型?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤梅忌,失蹤者是張志新(化名)和其女友劉穎狰腌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牧氮,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琼腔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踱葛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丹莲。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尸诽,靈堂內(nèi)的尸體忽然破棺而出甥材,到底是詐尸還是另有隱情,我是刑警寧澤性含,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布洲赵,位于F島的核電站,受9級(jí)特大地震影響胶滋,放射性物質(zhì)發(fā)生泄漏板鬓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一究恤、第九天 我趴在偏房一處隱蔽的房頂上張望俭令。 院中可真熱鬧,春花似錦部宿、人聲如沸抄腔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赫蛇。三九已至绵患,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悟耘,已是汗流浹背落蝙。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留暂幼,地道東北人筏勒。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旺嬉,于是被迫代替她去往敵國(guó)和親管行。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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