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
网友评论