Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多次按索引查找列表中的数据是一种不好的做法吗?_Android_Performance_Kotlin - Fatal编程技术网

Android 多次按索引查找列表中的数据是一种不好的做法吗?

Android 多次按索引查找列表中的数据是一种不好的做法吗?,android,performance,kotlin,Android,Performance,Kotlin,我喜欢下面的代码 override fun onBindViewHolder(holder: ViewHolder, position: Int) { val view = holder.view view.apply { name.text = list[position].name age.text = list[position].age address1.text = list[position].address1

我喜欢下面的代码

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val view = holder.view
    view.apply {
        name.text = list[position].name
        age.text = list[position].age
        address1.text = list[position].address1
        address2.text = list[position].address2
        zip_code.text = list[position].zip_code
    }
}
它多次查找数据以获取每个属性,如名称、年龄、地址1

我想知道是否最好将数据分配给一个变量并使用它?像这样,

val view = holder.view
val data = list[position]
view.apply {
    name.text = data.name
    age.text = data.age
    address1.text = data.address1
    address2.text = data.address2
    zip_code.text = data.zip_code
}
分配给新变量的成本是否更高


请告诉我哪一个更好,为什么更好?

第二个可能更好,原因有两个:

  • 您不必多次访问指定索引处的列表,只需访问一次()

  • 它的可读性更高,并且减少了重复的错误


  • 第二种可能更好,原因有二:

  • 您不必多次访问指定索引处的列表,只需访问一次()

  • 它的可读性更高,并且减少了重复的错误


  • 这取决于
    列表
    实现。在
    arraylist
    get(index)的情况下,复杂度为O(1),因此两者的性能相同。如果复杂度相同,那么第一个更好?因为即使在
    O(1)
    复杂度下,它也会保存单个变量,因此多次访问元素会有更差的性能-除非编译器或proguard或运行时可以将其优化为仅一次访问。这取决于
    列表
    实现。在
    arraylist
    get(index)的情况下,复杂度为O(1),因此两者的性能相同。如果复杂度相同,那么第一个更好?因为即使在
    O(1)
    复杂度下,它也会保存单个变量,因此多次访问元素会有更差的性能-除非编译器或proguard或运行时可以将其优化为仅一次访问。
    val view = holder.view
    view.apply { list[position].also { data ->
        name.text = data.name
        age.text = data.age
        address1.text = data.address1
        address2.text = data.address2
        zip_code.text = data.zip_code
    }}