kotlin中的集合
val list1= listOf(1,2,3)//不能添加或者删除元素
val list2= mutableListOf(1,2,3)//可以添加或者删除元素
val list3=ArrayList<String>()
// a to b 就是 k -v 键值对的 简单写法
val map= mapOf("name" to "wuyue","age" to 20) //无法put 元素 不可变的
//any 就是java中的object 所有类的父类
val map3:Map<String,Any> = mapOf("name" to "wuyue","age" to 20)
val map2= mutableMapOf("name" to "wuyue","age" to 20)//可以put remove元素
主要就是可变和不可变,代码注释写的很详细了。不多说。
额外要注意的是Kotlin中的ArrayList 其实就是
SinceKotlin("1.1") public actual typealias RandomAccess = java.util.RandomAccess
@SinceKotlin("1.1") public actual typealias ArrayList<E> = java.util.ArrayList<E>
@SinceKotlin("1.1") public actual typealias LinkedHashMap<K, V> = java.util.LinkedHashMap<K, V>
@SinceKotlin("1.1") public actual typealias HashMap<K, V> = java.util.HashMap<K, V>
@SinceKotlin("1.1") public actual typealias LinkedHashSet<E> = java.util.LinkedHashSet<E>
@SinceKotlin("1.1") public actual typealias HashSet<E> = java.util.HashSet<E>
这里typealias 就是别名的意思,这个东西的作用主要就是用来处理多平台的,比如js中没有这些东西, kotlin又支持编译成js代码,所以就有一个别名的概念, 虽然你js没有 但是我可以实现啊,只是实现了以后对外暴露的 还得叫ArrayList。
val list3 = ArrayList<String>()
for (i in 0..100) {
list3 += "num:$i"//这里就是类似于java中的add函数,只不过kotlin支持了运算符重载所以有这种简便的写法
}
list3 -= "num:0"//删除一个元素
list3[0]="wuyue"//给一个元素赋值
map的类型在kotlin中也可以用[] 来处理赋值和取值。 基本上就是这些。 总结一下 集合 java和kotlin的区别
- kotlin中的集合类型 分为可变和不可变,一定程度上能提高我们代码的安全性
- kotlin中的集合类型 有很多操作符重载的概念,比如[] 等等,可以有效提高我们编码的速度和可读性
Pair与Triple类型
kotlin还方便的提供了键值对类型。
val pair="hello" to "kotlin"
var pair2=Pair("hello","wuyue")
println(pair.first+" "+pair.second)//hello kotlin
val(x,y)=pair2// 结构的表达式
println(x)//hello
println(y)//wuyue
还有三元类型
val t1 = Triple("hello", "wolrd", "wuyue")
挺好理解的 就不多说了
区间
//char long 也可以用区间
val intRange = 1..10//[1,10] 闭区间
val charRange = 'a'..'z'
val intRangeExclusive = 1 until 10 //[1,10) 前闭后开 区间
val intRangeReverse = 10 downTo 1 //[10,9,8...1] 闭区间
val intRangeWithStep = 1..10 step 2 // 设定区间的步长 1 3 5 7 9
println(intRangeWithStep.joinToString())
区间 更多的应用是在循环中
// 区间的遍历 和数组是一样的
val array = intArrayOf(1, 3, 5, 7)
//这个就相等于 java代码里 我们遍历时常用的 for(int i=0;i<array.size;i++)
for (i in 0 until array.size) {
println(array[i])
}
//下面这两种 就是上面的的简写 写法
for (i in array.indices) {
println(array[i])
}
for (element in array) {
println(element)
}
数组

再看看基本使用
//下面这两种数组的创建方式 是等价的
val c0 = intArrayOf(1, 2, 3, 4, 5)
//这个5 就代表数组的大小 it 就代表数组的下标
val c1 = IntArray(5) { it + 1 }
//这种打印的 就不是数组的内容了 是数组的地址
println(c0)
//可以用这个函数 来方便的将数组打印出来
println(c1.contentToString())
//java中数组的长度是length 其他都是size 而在kotlin中 统一都处理成size 来获取大小
println(c1.size)
val d = arrayOf("hello", "world")
println(d.contentToString())
val e = floatArrayOf(1f, 2f, 4f, 7f)
//与java中的 for(el:e) 等价
for (el in e) {//数组的遍历
println(el)
}
//与 java中的 for(int i=0;<xx.length;i++)
e.forEach {
println(it)
}
//判断是否在数组中
if (1f in e) {
println("1f in e")
}
//判断是否在数组中
if (3f !in e) {
println("3f not in e")
}
函数和方法
大部分情况下 方法和函数的含义是一样的。 非要区分的话 是如下的区别;
-
方法是有receiver的,比如java中的每个函数 都必须在一个类里面来定义, 这就意味着 一定是 x.method 这个x 就是receiver 是method所在类的一个对象。
-
而函数可以不依托类而存在,kotlin中的顶层函数就是如此。 他是没有receiver的。
-
其实两者也没多大区别 函数其实也是一种方法,只不过他是特殊的方法 这个方法的第一个参数就是receiver,有兴趣的同学可以看一下python的方法定义,第一个参数往往就是self 这个self 其实就是receiver。
谨记 kotlin中的函数引用写法:

函数引用其实就有点类似于 c语言中的函数指针。
//与java中的可变参数 是一个意思 java中是 String... args 的写法
fun t3(vararg args:String){
}
你看 经常使用的listof 就是用的这种写法

函数中添加默认参数的写法:
