写点什么

Kotlin 学习手记——基本类型,安卓开发 kotlin 推荐书籍

用户头像
Android架构
关注
发布于: 10 小时前
  • map 也可以直接用[ ]来存取:


val hashMap = HashMap<String, Int>()


hashMap["Hello"] = 10


println(hashMap["Hello"])


  • 特殊集合类型:Pair 表示一对值, Triple 表示一个三值集合


val pair = "Hello" to "Kotlin"


val pair = Pair("Hello", "Kotlin")


val first = pair.first


val second = pair.second


val (x, y) = pair


val triple = Triple("x", 2, 3.0)


val first = triple.first


val second = triple.second


val third = triple.third


val (x, y, z) = triple

[](

)数组类型:



kotlin 中的数组类型跟 java 相对应,其中基本类型和装箱类型的写法也是不一样的,装箱类型的都带有泛型参数,基本类型直接是一个类



  • 数组的长度:


val a = IntArray(5)


println(a.size) //same with the Collections(e.g. List)


val b = ArrayList<String>()


println(b.size)


比 java 好的地方:不需要.length 和.size 区分了,集合长度也是.size


  • 数组创建


val c0 = intArrayOf(1, 2, 3, 4, 5)


val c1 = IntArray(5){ 3 * (it + 1) } // y = 3*(x + 1) 这里 it 是从 0 开始的下标


println(c1.contentToString())


  • 引用数组值


val d = arrayOf("Hello", "World")


d[1] = "Kotlin"


println("{d[1]}")


  • 数组遍历:


val e = floatArrayOf(1f, 3f, 5f, 7f)


//普通遍历


for (element in e) {


println(element)


}


println("====================")


//遍历支持箭头函数


e.forEach { element ->


println(element)


}


println("====================")


//一个参数可以省略箭头 it 是某个元素


e.forEach {


println(it)


}


println("====================")


显然 forEach 和箭头函数的遍历方式最方便


  • 判断某个元素是否在数组中:


if(1f in e){


println("1f exists in variable 'e'")


}


  • 判断某个元素不在数组中:


if(1.2f !in e){


println("1.2f not exists in variable 'e'")


}

[](

)区间类型:


  • kotlin 中的区间类型,java 没有:




![在这里插入图片描述](https://img-blog.csdnimg.cn/20201211003927891.jpg?x-o


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x5YWJjMTIzNDU2,size_16,color_FFFFFF,t_70#pic_center)



  • 可数区间 即离散区间才能打印出来,连续区间是不能打印的:


//闭区间


val intRange = 1..10 // [1, 10]


val charRange = 'a'..'z'


val longRange = 1L..100L


val floatRange = 1f .. 2f // [1, 2]


val doubleRange = 1.0 .. 2.0


//打印可数的区间 离散区间


println(intRange.joinToString())


//对于不可数的区间,这样不能打印出来 连续区间


println(floatRange.toString())


  • 可数的离散区间才支持步长设置:


//可数的离散区间才支持步长设置


val intRangeWithStep = 1..10 step 2


val charRangeWithStep = 'a'..'z' step 2


val longRangeWithStep = 1L..100L step 5


println(intRangeWithStep.joinToString())


println("====================")


//半闭半开区间


val intRangeExclusive = 1 until 10 // [1, 10)


val charRangeExclusive = 'a' until 'z'


val longRangeExclusive = 1L until 100L


println(intRangeExclusive.joinToString())


println("====================")


//倒序区间


val intRangeReverse = 10 downTo 1 // [10, 9, ... , 1]


val charRangeReverse = 'z' downTo 'a'


val longRangeReverse = 100L downTo 1L


println(intRangeReverse.joinToString())


println("====================")


  • 遍历离散区间跟数组一样:


for (element in intRange) {


println(element)


}


intRange.forEach {


println(it)


}


  • 判断一个值是否在连续区间中:


if (3.0 in doubleRange) {


println("3.0 in range 'doubleRange'")


}


if (3.0 !in doubleRange) {


println("3.0 not in range 'doubleRange'")


}


  • 判断一个值是否在离散区间中:


if (12 !in intRange) {


println("12 not in range 'intRange'")


}


if (12 in intRange) {


println("12 in range 'intRange'")


}


  • kotlin 中的for-i循环便捷写法:


val array = intArrayOf(1, 3, 5, 7)


for(i in array.indices){


println(array[i])


}


//麻烦点的写法


for (i in 0 until array.size) {


println(array[i])


}


集合、数组、区间这三种类型他们的遍历和判断是否在集合中都是一样的方法,使用 for-in 语法。

[](

)函数定义:



其中函数返回值为 Unit 可以省略 即 void 类型省略,跟 java 也是一样的。



函数引用的写法感觉比较奇怪,它是函数名前面加两个冒号



左边冒号后面的函数类型可以写,也可以省略掉,简写



其中等号右侧冒号前面有类名的是类对象的方法引用,在调用的时候也要传对象实例才行:


val foo = Foo();


h(foo, "qq", 1);


  • 变长参数:kotlin 中函数变长参数类型使用vararg 修饰


fun multiParameters(vararg ints: Int){


println(ints.contentToString())


}


这时 ints 实际上是一个 IntArray,可以进行遍历操作等。这个变长参数类型很奇怪,看上去是 var 和 arg 两个单词的合并。


listOf(1,2,3) //listOf 也是通过变长参数实现的


  • 函数默认参数:


fun defaultParameter(x: Int, y: String, z: Long = 0L){


TODO()


}


//默认参数省略


defaultParameter(5, "Hello")


  • 如果默认参数不是最后一个,必须使用具名参数:


fun defaultParameter(x: Int = 5, y: String, z: Long = 0L){


TODO()


}


defaultParameter(y = "Hello")


  • 函数参数可以是另一个函数:


fun test(p: (Foo, String, Long) -> Any){


//p(Foo(), "Hello", 3L)//调用


}


val x = Foo::bar


test(x)


  • 多参数返回值:


fun multiReturnValues(): Triple<Int, Long, Double> {


return Triple(1, 3L, 4.0)


}


val (a, b, c) = multiReturnValues()


val r = a + b


val r1 = a + c


实际就是返回了一个 Triple 对象,它可以持有多个值而已



用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Kotlin学习手记——基本类型,安卓开发kotlin推荐书籍