Kotlin 第三讲——集合篇1
內容簡介:前文介紹了數據類型相關的文章,本講我們來聊聊 Kotlin 中的集合。
?
簡介
?
Kotlin 完全兼容 Java 的集合,且 Kotlin 有專有的集合:可變集合&不可變集合(本質還是 Java 的集合,后面講到的類的映射大家就明白啦)。
?
不可變集合:集合在創建的時候,就知道元素的個數與內容。創建后不可以新增元素。
fun main() { /** * Kotlin 不可變集合 * 都不帶有 add 方法和 remove 方法 * * 其實不可變的集合,就是給編譯器看的.編譯器不讓你寫 remove 方法,最終編譯的 class 文件都映射成了 Java 的集合 * Java 調用 Kotlin 的不可變集合,是可以調用到 remove 和 add 方法的 */ val listOf = listOf<String>("1", "2", "3") val setof = setOf<String>("1", "2", "3") val map = mapOf<String, Int>(Pair("1", 1), Pair("2", 2)) /** * 注意: * 為啥可以用 to 連接呢?(后續講到神奇的中綴符號,類似自定義操作符) */ val mapof = mapOf("1" to 1, "2" to 3) }補充一點:
?
可變結合:創建后可以新增元素。
fun main() { /** * Kotlin 中的可變集合 * 最終也是映射成 Java 的集合 */ val list = mutableListOf<String>("1", "2", "3") val mutableMapOf = mutableMapOf(1 to 2, 2 to 3) val mutableSetOf = mutableSetOf(1 , 3) /** * 當然 Kotlin 也可以直接使用 Java 的集合定義 */ val javaList = ArrayList<String>() val javaMap = HashMap<String, Int>() val javaSet = HashSet<String>() }?
Kotlin 集合方法的封裝
?
Kotlin 為我們擴展了好多方便操作集合方法,我們來看看常用的幾個吧。
List 集合
取值:可直接通過索引獲取
fun main() { val javaList = ArrayList<String>() /** * 直接通過索引訪問 */ val s = javaList[0] }?
取區間:還記得 Kotlin 特有的區間嗎?當我們想從 list 集合中取一個區間范圍的時候,使用 slice 方法即可。
fun main() { val javaList = ArrayList<String>() /** * 取區間,當然也可以使用半開區間 until */ val result = javaList.slice(0..2) }?
List集合直接相加減:Kotlin List 集合可以運算啦!!!(大伙考慮下,怎么實現的呢?)
| list1 + list2 | 最終結果,合并2個集合 |
| list1 - list2 | 最終結果,list1 于 list2 的差集 |
?
遍歷丶轉換丶過濾:Kotlin 提供了很多類似 RxJava 的操作符。
fun main() { val javaList = ArrayList<String>() /** * 數據轉換 */ javaList.map { } /** * 過濾 */ javaList.filter { } /** * flatMap轉換 */ javaList.flatMap { } /** * 遍歷 */ javaList.forEach { } /** * 索引+值遍歷 */ javaList.forEachIndexed { index, s -> } }?
刪除元素:Kotlin 的 remove 方法是刪除指定元素,removeAt 是按照索引刪除,removeIf 可以條件刪除。
fun main() { val list= mutableListOf<String>() /** * 對象刪除 */ list.remove("") /** * 索引刪除 */ list.removeAt(0) /** * 條件刪除 */ list.removeIf { } }Map 集合
Map 集合在 Java 中是經常使用的集合。但是我不得不吐糟 Java 中 Map 集合遍歷很惡心。Kotlin 做了很大的改變,接下來我們來瞧一瞧。
?
增加元素:增加元素可以直接使用 [],類似數組賦值的語法增加(取 key 的值,也支持此語法)。
fun main() { /** * 創建可變 Map 并增加 2 個元素 * 注意: 這里的增加元素是通過 key to value 的形式,后面會講解這個 to 的原理 */ val mutableMap = mutableMapOf<String, Int>("阿文" to 18, "小麗" to 18) /** * 新的增加元素方式,增加 key=阿花 value=12 的一個元素 */ mutableMap["阿花"] = 12 }?
刪除元素
fun main() { val mutableMap = mutableMapOf<String, Int>("阿文" to 18, "小麗" to 18) mutableMap.remove("阿文") }?
遍歷丶轉換丶過濾
fun main() { val mutableMap = mutableMapOf<String, Int>("阿文" to 18, "小麗" to 18) /** * map 轉換 */ mutableMap.map { } /** * 過濾 */ mutableMap.filter { } /** * 遍歷 */ mutableMap.forEach { key, value -> } /** * in 遍歷 */ for (mutableEntry in mutableMap) { } /** * 這種形式的遍歷和上面的 in 遍歷方式是一致的 * 為何可以這樣寫?后面講到重載操作符會補充這里 */ for ((value, key) in mutableMap) { } }?
總結
?
Kotlin 為集合提供了很多強大的輔助方法,實現原理都很簡單。(都是對集合進行封裝。其實這些功能全都歸功于 Koltin 的擴展函數。期待我們的下一篇文章吧!)。
?
參考內容:
-
Reference - Kotlin 語言中文站
https://www.kotlincn.net/docs/reference/
?
推薦閱讀
--END--
識別二維碼,關注我們
總結
以上是生活随笔為你收集整理的Kotlin 第三讲——集合篇1的全部內容,希望文章能夠幫你解決所遇到的問題。