1. 程式人生 > >Blog-08-《一週快速上手Kotlin For Android》-之ArrayList

Blog-08-《一週快速上手Kotlin For Android》-之ArrayList

在 Kotlin 中沒有實現和 Java 一樣的 List 集合,而是使用了和 Java 一樣的 ArrayList 集合。Kotlin 中提供了以下四種函式方法來使用 ArrayList,分別是

1、listOf()
2、listOfNotNull()
3、mutableListOf()
4、arraylistOf()

其中最主要的區別為可變的集合與不可變的集合。listOf()、listOfNotNull() 為不可變集合,mutableListOf()、arraylistOf()為可變集合。

一、建立不同 ArrayList

1.1 llistOf()

var list = listOf(“A”, “B”, “C”)
Log.e(“TEST”, list.toString())

輸出:[A, B, C]

var list2 = listOf(null)
Log.e(“TEST”, list2.toString())

輸出:[null]

1.2 listOfNotNull()

var list = listOfNotNull(“A”, “B”, “C”, null)
Log.e(“TEST”, list.toString())

輸出:[A, B, C]

var list2 = listOfNotNull(null)
Log.e(“TEST”, list2.toString())

輸出:[]

1.3 mutableListOf()

var list = mutableListOf(“A”, “B”, “C”, null)
Log.e(“TEST”, list.toString())

輸出:[A, B, C, null]

var list2 = mutableListOf(null)
Log.e(“TEST”, list2.toString())

輸出:[null]

1.4 arraylistOf()

var list = arrayListOf(“A”, “B”, “C”, null)
Log.e(“TEST”, list.toString())

輸出:[A, B, C, null]

var list2 = arrayListOf(null)
Log.e(“TEST”, list2.toString())

輸出:[null]

總結:可以看到以上不同的 ArrayLit 建立時加入 null 值,在 listOfNotNull() 中是不能輸出的。所以可以在不能加入 null 的 List 中使用 listOfNotNull()。

二、獲取 ArrayList 中的元素

在 Kotlin 中 ArrayList 的索引也是從0開始計算的。

2.1 迴圈遍歷 ArrayList 元素

var list = mutableListOf(“A”, “B”, “C”)
for (i in 0 until list.size){
Log.e(“TEST”, “list: ” + list.get(i))
}

輸出:[A B C]

2.2 獲取 ArrayList 指定的子集合

var list = mutableListOf(“A”, “B”, “C”)
println(list.subList(1, 2))

輸出:[B]
使用子集時一定要注意索引號,防止 IndexOutOfBoundsException 陣列溢位。例子中對應的 subList 原始碼如下:

override fun subList(fromIndex: Int, toIndex: Int): MutableList

三、修改 ArrayList 中的元素。

因在 Kotlin 的 ArrayList 提供的函式中存在可變集合和不可變集合的概念,所以並不是所有的 ArrayList 都支援修改元素。mutableListOf()、arraylistOf()是支援可變集合的。此處所講述的修改 ArrayList 就是代表增、刪、改。

3.1 插入元素

插入元素以下程式碼例項主要是指在對應的 index 位置插入新的元素。

var list = mutableListOf(“A”, “C”)
Log.e(“TEST”, list.toString())
list.add(1, “B”)
Log.e(“TEST”, list.toString())

原 list 輸出:[A, C]
插入資料輸出:[A, B, C]

其中 add 的原始碼如下:

public fun add(index: Int, element: E): Unit

3.2 刪除元素

刪除對應的 index 位置元素。

var list = mutableListOf(“A”, “B”, “C”)
Log.e(“TEST”, list.toString())
list.removeAt(1)
Log.e(“TEST”, list.toString())

原 list 輸出:[A, B, C]
刪除資料後輸出:[A, C]

其中 removeAt 的原始碼如下:

public fun removeAt(index: Int): E

3.3 修改元素

修改對應的 index 位置元素。

var list = mutableListOf(“A”, “B”, “C”)
Log.e(“TEST”, list.toString())
list[1] = “A”
Log.e(“TEST”, list.toString())

原 list 輸出:[A, B, C]
修改資料後輸出:[A, A, C]