美文网首页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