Kotlin進(jìn)階 - 集合

本篇主要講述Kotlin集合,主要包括List平窘、Set吓肋、Array、Map四類初婆。

一蓬坡、List篇

1.1 固定長度的List

定義方式:使用listOf定義固定長度的list集合。
如:

val list = listOf("Sam", "Jack", "Chork", "Yam")
println(list[2])

取值方式:

  • 索引磅叛、elementAt屑咳,這兩種方式越界會拋異常;
  • getOrElse弊琴、elementAtOrElse兆龙、getOrNull、elementAtOrNull敲董,這幾種屬于安全取值紫皇,查找不到有輔助處理;
    //該方式獲取時腋寨,若索引越界會拋異常
    println(list[4])
    println(list.elementAt(1))
    //該方式獲取指定的索引的值聪铺,若越界會返回指定的默認(rèn)字符串
    println(list.getOrElse(4){"UnKnown"})
    println(list.getOrElse(2){"UnKnown"})
    //同上方法
    println(list.elementAtOrElse(4){"UnKnown"})
    //該方式獲取指定索引的值時,若越界則會返回null
    println(list.getOrNull(4))
    //同上方法萄窜,內(nèi)部調(diào)用了getOrNull方法
    println(list.elementAtOrNull(4))

元素去重方式:

//********* 元素去重
list.distinct() //等價于 list.toSet().toList()

轉(zhuǎn)可變長度的List集合

//********* 轉(zhuǎn)可變集合
val toMutableList = list.toMutableList()

轉(zhuǎn)數(shù)組方式:會根據(jù)數(shù)據(jù)類型調(diào)用對應(yīng)的轉(zhuǎn)換函數(shù)

//這里list是對象類型的故要用toTypedArray
val toTypedArray = list.toTypedArray()
//整數(shù)List
listOf(10,20).toIntArray()
1.2 可變長度的List

定義方式:使用mutableListOf

val mutableList = mutableListOf("Sam", "Jack", "Chork", "Yam")

取值方式:與固定長度的List取值方式一樣铃剔。
添加元素:通過"+="、add函數(shù)

//**************添加元素
mutableList += "Hab"    //mutator函數(shù)
mutableList.add("Hab2")
mutableList.add(1,"Hab3")
println(mutableList)

刪除元素:通過“-=”查刻、remove键兜、removeAt、removeIf(刪除滿足條件的元素)

//**************刪除元素
mutableList -= "Sam"
//按索引移除元素
mutableList.removeAt(0)
mutableList.remove("Hab2")
//移除符合條件的數(shù)據(jù)
mutableList.removeIf{it.contains("k")}
mutableList.removeFirst()
mutableList.removeFirstOrNull()
mutableList.removeLast()
mutableList.removeLastOrNull()
println(mutableList)

轉(zhuǎn)不可變長度的List集合

//**************轉(zhuǎn)不可變的List
val toList = mutableList.toList()

轉(zhuǎn)Set集合

//**************轉(zhuǎn)Set
val toSet = mutableList.toSet()
1.3 List遍歷

直接上示例

fun main() {
    val list = listOf("Sam", "Jack", "Chork")

    //*********** 遍歷方式一 ***************
    for (s in list){
         println(s)
    }

    //*********** 遍歷方式二 ***************
    list.forEach {
        println(it)
    }

    //*********** 遍歷方式三 帶索引 ***************
    list.forEachIndexed { index, s ->
        println("${index},${s}")
    }

    //*********** 遍歷方式四 帶索引 ***************
    list.withIndex().forEach {
        println("${it.index},${it.value}")
    }

    //*********** 遍歷方式五 解構(gòu) ***************
    val (first,second,third) = list
    println("$first $second $third")
    //若不想取某個元素的值穗泵,則可以通過下劃線“_”
    val (origin,_,last) = list
    println("$origin $last")
}

二普气、Set篇

2.1 不可變長度的Set集合

定義方式:setOf

val set = setOf("Sam", "Jack", "Chork", "Sam")

取值方式:與List類似,但是set集合無法通過索引的方式直接取值(set[0])

println(set.elementAt(1))
//安全取值方式
println(set.elementAtOrElse(1){"UnKnown"})
println(set.elementAtOrNull(1))

轉(zhuǎn)可變長度的set集合

//轉(zhuǎn)可變長度的Set集合
val toMutableSet = set.toMutableSet()
2.2 可變長度的Set集合

定義方式:mutableSetOf

val mutableSet = mutableSetOf("Sam", "Jack", "Chork", "Yam")

添加元素

//********* 添加元素
    mutableSet += "Yam"
    mutableSet.add("Hob")
    println(mutableSet)

刪除元素

//********* 刪除元素
mutableSet -= "Sam"
//刪除符合條件的元素
mutableSet.removeIf{it.contains("k")}
println(mutableSet)

轉(zhuǎn)不可變長度的Set集合

//********* 轉(zhuǎn)不可變Set集合
val toSet = mutableSet.toSet()
2.3 Set集合遍歷

同List遍歷

三佃延、Array篇

Kotlin提供了各種類型的Array

數(shù)組類型 創(chuàng)建數(shù)組函數(shù)
IntArray intArrayOf
DoubleArray doubleArrayOf
LongArray longArrayOf
ShortArray shortArrayOf
ByteArray byteArrayOf
FloatArray floatArrayOf
BooleanArray booleanArrayOf
Array arrayOf

示例:

fun main() {
    //1.Int數(shù)組
    val intArrayOf = intArrayOf(10, 20, 30)
    //2.Double 數(shù)組
    val doubleArrayOf = doubleArrayOf(2.3, 2.0, 1.5)
    //3.Float 數(shù)組
    val floatArrayOf = floatArrayOf(2.0f, 1.5f)
    //4.Long 數(shù)組
    val longArrayOf = longArrayOf(10L, 20L)
    //5.Short 數(shù)組
    val shortArrayOf = shortArrayOf(10, 20)
    //6.Byte 數(shù)組
    val byteArrayOf = byteArrayOf(1, 2, 3)
    //7.Boolean 數(shù)組
    val booleanArrayOf = booleanArrayOf(true, false)
    //8.Object 數(shù)組
    val arrayOf = arrayOf(User(), User())
}
//定義一個類
private class User

四现诀、Map篇

4.1 不可變長度的map

定義方式:mapOf

//to是通過中綴表達(dá)式定義的擴(kuò)展函數(shù)
val map = mapOf("Jack" to 10, "Sam" to 20, "Luck" to 18)

取值方式

//*********** 讀取Map的值
println(map["Jack"])
println(map.getValue("Sam"))
//安全取值函數(shù)
println(map.getOrElse("Sam"){"Unknown"})
println(map.getOrDefault("JJ",0))

4.2 可變長度的Map

定義方式:mutableMapOf
map中的鍵值對是Pair類型 ==> Pair<A, B>

val map = mutableMapOf("Jack" to 10, "Sam" to 20, "Luck" to 18)

向map中增加元素 : "+="、put履肃、getOrPut

//******** 添加元素
map += "Haha" to 16
map.put("Hob",18)
//獲取指定的key元素赶盔,若不存在則將該元素加入到map中
map.getOrPut("Choice"){17}
println(map)

從map中移除元素,通過"-="榆浓、remove

//******** 移除元素
map -= "Haha"
map.remove("Jack")
println(map)

map轉(zhuǎn)其他集合

//******** map轉(zhuǎn)List集合
val toList = map.toList()
println(toList)
4.3 map集合遍歷

通過forEach方式,有下面兩種方式

fun main() {
    val map = mapOf("Jack" to 10, "Sam" to 20, "Luck" to 18)

    //方式一
    map.forEach {
        println("${it.key}撕攒,${it.value}")
    }

    //方式二
    map.forEach { (t, u) ->
        println("${t} -- ${u}")
    }
}

歡迎留言大家互相交流學(xué)習(xí)陡鹃!


示例源碼地址kotlin_demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烘浦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萍鲸,更是在濱河造成了極大的恐慌闷叉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脊阴,死亡現(xiàn)場離奇詭異握侧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘿期,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門品擎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人备徐,你說我怎么就攤上這事萄传。” “怎么了蜜猾?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵秀菱,是天一觀的道長。 經(jīng)常有香客問我蹭睡,道長衍菱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任肩豁,我火速辦了婚禮脊串,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓖救。我一直安慰自己洪规,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布循捺。 她就那樣靜靜地躺著斩例,像睡著了一般。 火紅的嫁衣襯著肌膚如雪从橘。 梳的紋絲不亂的頭發(fā)上念赶,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機(jī)與錄音恰力,去河邊找鬼叉谜。 笑死,一個胖子當(dāng)著我的面吹牛踩萎,可吹牛的內(nèi)容都是我干的停局。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼董栽!你這毒婦竟也來了码倦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锭碳,失蹤者是張志新(化名)和其女友劉穎袁稽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擒抛,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡推汽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歧沪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歹撒。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖槽畔,靈堂內(nèi)的尸體忽然破棺而出栈妆,到底是詐尸還是另有隱情,我是刑警寧澤厢钧,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布鳞尔,位于F島的核電站,受9級特大地震影響早直,放射性物質(zhì)發(fā)生泄漏寥假。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一霞扬、第九天 我趴在偏房一處隱蔽的房頂上張望糕韧。 院中可真熱鬧,春花似錦喻圃、人聲如沸萤彩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雀扶。三九已至,卻和暖如春肆汹,著一層夾襖步出監(jiān)牢的瞬間愚墓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工昂勉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪册,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓岗照,卻偏偏與公主長得像村象,于是被迫代替她去往敵國和親笆环。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • 大部分的語言的集合類型都大同小異煞肾,不過看到kotlin里面集合分成了可變類型集合和不可變類型集合咧织。它們之間用處不同...
    JamesSawyer閱讀 1,283評論 0 1
  • "集合:List、Set渠抹、Map" 集合:List蝙昙、Set、Map 與大多數(shù)語言不同梧却,Kotlin 區(qū)分可變集合和...
    Tenderness4閱讀 279評論 0 0
  • 可空性和集合 函數(shù)的參數(shù)可以為可空的奇颠,集合的類型參數(shù)也是可以聲明為可空的. 下面來看一個創(chuàng)建一個包含可空值的集合 ...
    e小e閱讀 2,140評論 0 0
  • 集合派生的兩個接口 CollectionMutableCollectionMutableSet 可變集合Mu...
    凌煙醉臥閱讀 1,114評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭放航,有人歡樂有人憂愁烈拒,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53