在做Kotlin
的开发中,数据结构的使用使我们操作程序的基础,在Kotlin
中有四种重要的容器,分别为Array
,Set
,List
和Map
,如果之前有接触过其他的语言编程的话,那么对这四种容器应该是非常熟悉的。
我们简单的介绍一下Set
,叫做集合,跟我们数学里学到的集合概念差不多,Array
之前在说数组的时候就有提到过,是用来建立数组的。List
为链表,这是在数据结构中,特别重要的一个概念。Map
为字典,key-value键值对,一一对应,如同我们的字典一样。
在这些容器中,有些是共同的特性,有些是每个类型中特有的,我们先把特有的介绍一下,再来说说他们之间的共性。
在Kotlin
中,容器为两大类,一类是不可变容器,一类是可变容器。可变容器在不可变容器的前面加上Mutable
。为什么要分为这样,这也许是为了运行速度。
去重可以集合set
在统计中,在统计日活是需要把重复的人员过滤掉,这时候使用集合set那就是在适合不够了,他自动的帮我们过滤掉重复的人员。
var people:MutableSet<String> = mutableSetOf("user1","user2")
people.add("user3")
people.add("user1")
people.forEach { println(it) }
我们定义了MutableSet<String>
的people
他可以用来存放用法,一开始有两个用户,后来又来了两个,但是user1
重复了。
这时候输出的也是三个用户:
I/System.out: user1
I/System.out: user2
I/System.out: user3
集合set 还有一个用处就是用来做交集,在统计中可以用来统计同时使用两个功能的用户。
var feature1 :MutableSet<String> = mutableSetOf("user1","user2","user3")
var feature2 :MutableSet<String> = mutableSetOf("user2","user3","user4")
var all = feature1.intersect(feature2)
all.forEach { println(it) }
用户 1,2,3用了功能1,用户2,3,4用了功能2,那么同时用了功能1和功能2的有哪些用户了,这就是用集合来进行交集计算。
I/System.out: user2
I/System.out: user3
常见的容器遍历操作
这是容器中都可以用的功能,对一个容器进行遍历操作是常见的事情。
- 1.for-in循环
这是c语言的一种常见形式,有点变形,但用法想法是一样的。
var array1:Array<Int> = arrayOf(1,2,2,3)
for(item in array1){
println(item.toString())
}
打印的结果为:
I/System.out: 1
I/System.out: 2
I/System.out: 2
I/System.out: 3
- 2.forEach遍历
forEach
的遍历方法,和其他语言相比还是有点不用的,Kotlin
中forEach
直接是变量的方法,这还是挺少见的。
var array1:Array<Int> = arrayOf(1,2,2,3)
for(item in array1){
array1.forEach { println(it) }
}
打印的结果为:
I/System.out: 1
I/System.out: 2
I/System.out: 2
I/System.out: 3
这里又见it
关键变量,在Kotlin
中,如果变量中的方法带{}
,那么一定有一个隐藏变量 it
来指代它,这个它是谁要看方法而定。
对于map
定义key
和value
的时候用的是关键字to
,其实这样不如用:
方便。
var map1:MutableMap<String,Int> = mutableMapOf("tomato" to 1,"apple" to 2)
map1.forEach { println(it.key + ": " + it.value.toString()) }
- 3.List的特殊遍历方法
List
是个队列,有序标方法,我们可以用序标的方式进行访问它。set
是不能用这种方式的,因为他没有序标。
var list1:MutableList<String> = mutableListOf("user1","user2","user3")
for(i in list1.indices){
println(list1[1])
}
打印结果如下:
I/System.out: user1
I/System.out: user2
I/System.out: user3
排序
如果我们相对一个容器进行排序的话,最好是用List
或者Map
,set
是不能用来排序的。
var list2:MutableList<Int> = mutableListOf(4,5,1,2,6,89,34)
list2.sort()
list2.sortBy { -it }
sort
为升序排序,sortBy
为自定义排序。
小结
这是 对于 Kotlin
中容器的一些使用的方法,在项目中我们可以选择自己需要的容器类型,不同的容器有不同的作用。
在Kotlin
引入的it
的关键字,起到了很好的作用,简化了很多编程的过程。