在前面的部分了解了第一個容器,也就是數組。在`Java`中有各種`List`、`Set`和`Map`各類容器,對應的在`Kotlin`中也有對應的實現。
# 1. 數組
## 1.1 簡單訪問
~~~
fun main() {
var a = arrayOf("Hello", "Bold", "!")
println(a)
for(i in a){
println(i)
}
}
~~~
和前面介紹的數組區別之處在于這里所使用的不再是`6`中基本數據類型,而是使用的`String`類型。結果如下:
```
[Ljava.lang.String;@4b67cf4d
Hello
Bold
!
```
也就是直接打印數組的時候不再可以直接顯示元素 ,而是打印其地址。
## 1.2 獲取下標
~~~
fun main() {
var a = arrayOf("Hello", "Bold", "!")
println(a)
for((index, i) in a.withIndex()){
println("下標${index}對應的值為${i}.")
}
}
~~~
結果:
```
[Ljava.lang.String;@4b67cf4d
下標0對應的值為Hello.
下標1對應的值為Bold.
下標2對應的值為!.
```
## 1.3 查找和替換
可以直接使用下標來訪問:
~~~
fun main() {
var a = arrayOf("Hello", "Bold", "!")
println(a[0])
a[0] = "Job"
for (s in a) {
println(s)
}
}
~~~
結果:
```
Hello
Job
Bold
!
```
也可以使用內置的函數:
~~~
fun main() {
var a = arrayOf("Hello", "Bold", "!")
var index = a.indexOf("Hello")
a.set(index, "Job")
for (s in a) {
println(s)
}
}
~~~
結果:
```
Job
Bold
!
```
這種方式比較適合于程序員不知道數組數據的情況。
# 2. List接口
`List`接口繼承自`Collection`接口,分為可變集合`MutableList`(`Read`&`Write`,`Mutable`)和不可變集合`List`(`ReadOnly`,`Immutable`)。不可變集合`List`對集合中的元素僅提供只讀操作。
## 2.1 不可變List
不可變列表,只有`size`屬性和`get()`函數。不可變`List`是通過`listOf()`函數創建的,該函數可以創建空的`List`,也可以創建包含一個或多個元素的`List`。比如:
~~~
fun main() {
var a : List<Int> = listOf(1, 5, 3)
var b = listOf<Int>(0, 1, 2, 3, 4, 5)
println(b.containsAll(a))
println(b.contains(4))
}
~~~
結果:
```
true
true
```
從上面可以看出:
- 使用`List`的`containsAll`方法意思就是判斷該`List`中是否包含另一個`List`中的所有元素,和元素順序無關;
對于其元素的**遍歷**,`List`中也提供了迭代器,使用方式和`Java`中的一致。比如下面的案例:
~~~
fun main() {
var b = listOf<Int>(0, 1, 2, 3, 4, 5)
val iterator = b.iterator()
while(iterator.hasNext()){
println(iterator.next())
}
}
~~~
## 2.2 可變MutableList
對于可變列表就不再僅僅支持查詢操作,可以進行添加、刪除和修改。比如下面的案例:
~~~
fun main() {
var b = mutableListOf<Int>(1, 2, 3)
b.add(4)
printList(b)
b.remove(3)
printList(b)
b[0] = 100
printList(b)
}
fun printList(b: MutableList<Int>) {
val iterator = b.iterator()
while(iterator.hasNext()){
print("${iterator.next()}\t")
}
println()
}
~~~
結果:
```
1 2 3 4
1 2 4
100 2 4
```
# 3. Set接口
和`Java`中一樣,`Set`接口中的元素是無序的,并且元素不可重復,重復的元素只會被記錄一次。在`Kotlin`中同樣分為可變集合`MutableSet`與不可變集合`Set`。
# 4. Map接口
`Map`集合中的元素是無序可重復的,`Map`集合與`List`、`Set`集合類似,同樣分為不可變集合`Map`和可變集合`MutableMap`兩種,其中可變集合`MutableMap`可以對集合中的元素進行增加和刪除的操作,不可變集合`Map`對集合中的元素僅提供只讀操作。
- Kotlin語言基礎
- Kotlin的簡介
- Kotlin的變量和常見數據類型
- Kotlin的區間
- Kotlin的位運算
- Kotlin的容器
- Kotlin類型檢查
- Kotlin的空值處理
- Kotlin的函數
- Kotlin的類
- Kotlin的委托
- Kotlin的延遲加載
- Kotlin的異常
- Kotlin的Lambda表達式
- Kotlin的高階函數
- Kotlin的標準庫中的高階函數
- Kotlin的泛型
- Kotlin的表達式
- Kotlin的解構
- Kotlin的運算符重載
- Kotlin語言中級
- Kotlin的擴展函數
- Kotlin的擴展屬性
- Kotlin的infix關鍵字
- Kotlin的DSL
- Kotlin的一些注解(和Java互調用)
- Kotlin的lateinit和by lazy
- Kotlin的反射
- Kotlin的匿名接口
- 安卓中的Kotlin
- 數據庫操作Room