ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在前面的部分了解了第一个容器,也就是数组。在`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`对集合中的元素仅提供只读操作。