從零開始學 Kotlin 之「3」集合、數組和區間

前言

你們好,這裏是「從零開始學 Kotlin 之『3』集合、數組和區間」,本文首發於公衆號「Binguner」,歡迎前往你們關注。 我會每週分享一些關於 Android 和其餘方向的技術乾貨或一些關於認知的文章。學習一門技術最好的方式就是去教會別人,因此,開始今天的學習吧!數組


01 只讀集合可變集合

Kotlin 中的集合和 Java 中的集合不同,分爲只讀集合可變集合函數

只讀集合只可以讀取集合中的元素,而可變集合才能夠對集合中的元素進行操做(Kotlin 爲了消除 Bug 也是想盡了辦法)。學習

01 - 1 集合的聲明

  • 只讀集合

只讀集合的聲明:ui

val numlist = listOf(1,2,3)
val numArraylist = arrayListOf(4,5,6)
val numHashSet = hashSetOf(7,8,9)
val numHashMap = hashMapOf("a" to 10,"b" to 11,"c" to 12)

println(numlist)  // 輸出 [1, 2, 3]
println(numArraylist)  //輸出[4, 5, 6]
println(numHashSet)  //輸出[4, 5, 6]
println(numHashMap)  //輸出{a=10, b=11, c=12}
複製代碼

注意:以上方式聲明的集合都不支持 add、addAll、clear 等增長或刪除數組元素對操做。this

  • 可變集合

可變集合的聲明:spa

val numMutablelist = mutableListOf(1,2,3)
val numMutableHashSet = mutableSetOf(7,8,9)
val numMutableHashMap = mutableMapOf("a" to 10,"b" to 11,"c" to 12)

println(numMutablelist)  // 輸出[1, 2, 3]
println(numMutableHashSet)  // 輸出[7, 8, 9]
println(numMutableHashMap)  // 輸出{a=10, b=11, c=12}

numMutablelist.add(4)
println(numMutablelist)  // 輸出[1, 2, 3, 4]
複製代碼
  • 集合的可空性

Kotlin 支持類型參數的可空性 Kotlin 中全部的泛型和泛型函數的類型參數都是可空的。code

var list = mutableListOf<Int?>()
複製代碼

01 - 2 繼承關係

可變集合的父類是 MutableCollectionMutableCollection 的父類是 CollectionCollection 只有 size、iterator、contains 等對集合的基本操做,MutableCollection 相較於 Collection 類,增長了 add、remove、clear 等操做集合的方法。cdn

01 - 3 對集合的操做

  1. filterNotNull()

這個方法會返回集合中沒有 Null 元素的集合視頻

var list = listOf(1,2,3,null,4,null);
println(list)  // 輸出 [1, 2, 3, null, 4, null]
println(list.filterNotNull())  // 輸出 [1, 2, 3, 4]
複製代碼
  1. 可變參數

Kotlin 中使用 vararg 來聲明一個可變的參數。查看 listOf 的源碼,就能夠看到 vararg 的使用。對象

public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()
複製代碼
  1. 中綴調用(infix function)

kotlin 中的 mapOf 函數就使用了中綴調用。

那麼到底什麼是中綴調用呢?

var map = mapOf(1 to "one",2 to "two", 3 to "three")
複製代碼

上面這行代碼中的 to 就是一箇中綴調用的函數名,中綴調用的時候,函數名直接放在兩個值之間。

下面來看一下 to 的源碼

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
複製代碼

Pair 類型表示一對元素。

因此咱們代碼中的 1.to("one") 等價於 1 to "one",但第二種寫法是否是更加簡單呢?

02 數組

02 - 1 建立數組

Kotlin 爲了使用數組,增長了 ArrayArrays

  • Array 由 arrayOf() 建立並返回,能夠生成任意參數類型的數組。
  • Arrays 能夠建立各類基本數據類型的數組,好比說 ByteArray、CharArray、ShortArray、IntArray、LongArray、FloatArray、DoubleArray、BooleanArray,對應的生成方法是 byteArrayOf()、charArrayOf() 等。

如今咱們來建立一個 String 類型的數組和 Int 類型的數組。 注:由於 String 不是基本類型,因此建立 String 類型的數組須要使用 arrayOf()。

var strArray = arrayOf("2","a","3")
println(strArray.joinToString(" "))  // 輸出 2 a 3

var intArray = intArrayOf(1,2,3,4,5,3)
println(intArray.joinToString(" "))  // 輸出 1 2 3 4 5 3
複製代碼

02 - 2 其餘建立數組的方法

除此以外,還有其餘生成數組的方法

  1. 使用 arrayOfNulls

建立一個指定大小的可空數組,默認初始元素全爲 null。

var array = arrayOfNulls<Int>(3)
array[2] = 3

println(array.joinToString(" "))  // 輸出 null null 3
複製代碼
  1. 使用 Array 的構造方法

直接使用 IntArray、ByteArray、CharArray 等類型等構造函數來建立數組,須要傳入一個數組大小和初始化每一個元素等 lambda 表達式,不進行初始化的話,kotlin 會提供一個默認值。

var array = IntArray(4){
    i -> i * 2
}
var array2 = BooleanArray(3)

println(array.joinToString(" "))  // 輸出 0 2 4 6
println(array2.joinToString(" "))  // 輸出 false false false
複製代碼

03 區間

Kotlin 中區間的概念和數學上的差很少,也用來表示一個範圍,它是由具備操做符形式 ..rangeTo 函數定義的。

03 - 1 定義區間

下面爲來定義幾種不一樣的區間:

  • 閉區間
var range = 1 .. 5

for ( i in range){
    print("$i ")
}  // 輸出 1 2 3 4 5 
複製代碼
  • 半閉區間
var range = 1 until 5
for ( i in range){
    print("$i ")  // 輸出 1 2 3 4
}
複製代碼
  • 倒序區間
var range = 5 downTo 1
for ( i in range){
    print("$i ")
}  // 輸出 5 4 3 2 1 
複製代碼
  • 自定義步長的區間
var range = 1..5 step 2
for (i in range){
    print("$i ")  // 輸出 1 3 5
}
複製代碼
  • 反轉序列
// 先定義一個 1 到 5 到區間
var range = 1 .. 5
// 對這個區間調用 `reversed()`
var range2 = range.reversed() 
    
for ( i in range2){
    print("$i ")  // 輸出 5 4 3 2 1
}
複製代碼

03 - 2 對區間的操做

1. in 和 !in

in 用來檢查某個對象是否屬於集合,它對應對函數是 contains!in 用來檢查某個對象是否不屬於集合 。

使用方法以下:

var range = 1 .. 5
println( 1 in range)  // 輸出 true
println( 1 !in range1)  // 輸出 false
複製代碼
2. 將區間轉換爲其餘類型

Kotlin 提供了一下方法能夠直接將區間轉換爲集合

var range1 = 1 .. 5
var list = range1.toList()
println(list)  // 輸出 [1, 2, 3, 4, 5]
複製代碼

固然還能轉換爲其餘類型,下面是 Kotlin 提供的方法。

Kotlin 提供的其餘轉化方法

最後

「從零開始學 Kotlin 之『3』集合、數組和區間」到這裏就結束了。

一下記住這麼多知識點有些困難,因此爲了方便你們的記憶與複習,我作了一張思惟導圖放到下面,你們能夠把圖片保存下來,有時間便去回顧學到的東西。

從零開始學 Kotlin 之「3」集合、數組和區間

推薦閱讀:

歡迎關注本文做者,這個系列的文章會首發在這裏:

掃碼關注 + 回覆「kotlin」,獲取我整理的最新版 Kotlin 學習視頻。

相關文章
相關標籤/搜索