在前面的部分了解了第一个容器,也就是数组。在`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