美文网首页Android开发经验谈Android技术知识Android开发
Kotlin 上手记 —— 那些「不是那么写的」

Kotlin 上手记 —— 那些「不是那么写的」

作者: 夜远曦白 | 来源:发表于2020-04-09 15:06 被阅读0次

Kotlin 里那些「不是那么写的」

https://kaixue.io/kotlin-basic-2/

练习题

1. 创建一个 Kotlin 类,这个类需要禁止外部通过构造器创建实例,并提供至少一种实例化方式

也不知道这样算不算是答案,不用构造器,就用单例喽,直接提供方法返回自己,也算提供了实例化的自己了吧:

object A{
    fun getInstans():A{
        return this
    }
}

也看了下其他人的答案,参考参考:

class Sample private constructor(){
    companion object{
        fun newInstance(): Sample{
            return Sample()
        }
    }
}

fun main() {
    val sample = Sample.newInstance()
}

另外一个:

class CreateInstances {

    fun callMethod() {
        val instance1 = getInstance()

        val instance2 = Second.getInstance()

        val instance3 = Third.getInstance()
    }

    companion object {
        fun getInstance(): CreateInstances {
            return CreateInstances()
        }
    }

    object Second {
        fun getInstance(): CreateInstances {
            return CreateInstances()
        }
    }

    class Third {
        companion object {
            fun getInstance() {

            }
        }
    }
}

再思考一下,好像我的答案不挑符合题目,没说可以用 object 关键字,题目说创建一个类,那还是选第二种吧。第三个方案讲真没看明白,这不是可以直接创建实例么,创建了实例不可就是通过构造器创建的嘛~~~ 可能不大对。

2. 分别用 Array、IntArray、List 实现 「保存 1-100_000 的数字,并求出这些数字的平均值」,打印出这三种数据结构的执行时间。

写出方法,依次调用:

    fun createArray() {
        val initArrayTime = System.currentTimeMillis()
        val array = Array(100000) { i -> i + 1 }
        val average = array.average()
        val endTime = System.currentTimeMillis()
        Log.d("MainActivity", "average = " + average + " array time = " + (endTime - initArrayTime))
    }

    fun createIntArray() {
        val initIntArrayTime = System.currentTimeMillis()
        val intArray = IntArray(100000) { i -> i + 1 }
        val average = intArray.average()
        val endTime = System.currentTimeMillis()
        Log.d("MainActivity", "average = " + average + " intArray time = " + (endTime - initIntArrayTime))
    }

    fun createList() {
        val initListTime = System.currentTimeMillis()
        val list = List(100000) { i -> i + 1 }
        val average = list.average()
        val endTime = System.currentTimeMillis()
        Log.d("MainActivity", "average = " + average + " list time = " + (endTime - initListTime))
    }
运行结果

实际上每次执行时间差不一定相同,可是执行时间一定是 List > Array > IntArray。

IntArray 背后是基本数据类型 int 的数组,最快是由于没有拆装箱

List 背后是 ArrayList

Array 背后是 Interger 类型的数组

平常用的话呢,List 最方便,用数组如果知道类型,就直接用专门基本类型数组类比较好。

Kotlin

相关文章

网友评论

    本文标题:Kotlin 上手记 —— 那些「不是那么写的」

    本文链接:https://www.haomeiwen.com/subject/jqitmhtx.html