Android 之 List 简述

一、简单创建方式

Android 开发中,列表有很多种类,如ArrayList、LinkedList、List、MutableList等,创建列表的方式如下所示:

复制代码
    fun listDemo() {
        // 使用 listOf 创建不可变的空列表
        val list = listOf<Int>()
        val list1 = listOf(1, 2, 3)

        // 使用 mutableListOf 创建可变的空列表
        var mutableList = mutableListOf<Int>()
        mutableList.add(1)
        val mutableList1 = mutableListOf(1, 2, 3)

        // 创建 ArrayList 数组列表
        var arrayList = ArrayList<String>()
        arrayList.add("test")
        var arrayList1 = arrayListOf<String>()
        arrayList1.add("test1")
        val arraylist2 = arrayListOf("test1", "test2")

        // 创建 LinkedList 列表
        var linkedList = LinkedList<Boolean>()
        linkedList.add(true)
        val linkedList1 = linkedSetOf(true, false, true)
        println(linkedList1)
    }

二、List 区别及使用场景

1、ArrayList:

  • 底层数据结构 :ArrayList基于动态数组实现,内部维护一个Object数组,默认初始容量为10,当元素数量超过当前容量时会自动扩容。
  • 随机访问效率高:由于基于数组,ArrayList支持通过索引快速访问元素,时间复杂度为O(1)。
  • 插入和删除效率低:在中间或开头插入/删除元素时,需要移动后续元素,时间复杂度为O(n)。
  • 适合随机访问:对于频繁随机访问元素的场景,ArrayList性能更好。

2、LinkedList:

  • 底层数据结构 :LinkedList基于双向链表实现,每个节点包含数据元素和指向前后节点的引用。
  • 插入和删除效率高:在任意位置插入/删除元素时,只需调整相邻节点的引用,时间复杂度为O(1)。
  • 顺序访问效率低:由于基于链表,LinkedList不支持随机访问,需要从头或尾开始遍历,时间复杂度为O(n)。
  • 适合频繁插入和删除:对于频繁插入和删除元素的场景,LinkedList性能更好。

3、List / MutableList:

List 和 MutableList 是接口,MutabaleList 实现了 List 接口,List 实现了 Collection 接口。采用 listOf 和 mutableListOf 方式创建列表时,实际创建的是 ArrayList。

复制代码
/**
 * Returns an empty new [MutableList].
 * @sample samples.collections.Collections.Lists.emptyMutableList
 */
@SinceKotlin("1.1")
@kotlin.internal.InlineOnly
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

/**
 * Returns a [List] that wraps the original array.
 */
public expect fun <T> Array<out T>.asList(): List<T>

/**
 * Returns a new read-only list of given elements.  The returned list is serializable (JVM).
 * @sample samples.collections.Collections.Lists.readOnlyList
 */
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()

参考文档:

https://blog.csdn.net/m0_56615376/article/details/136744493

相关推荐
sunnyday04262 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理3 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台3 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐3 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极3 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan4 小时前
setHintTextColor不生效
android
洞窝技术6 小时前
从0到30+:智能家居配网协议融合的实战与思考
android
QING6186 小时前
SupervisorJob子协程异常处理机制 —— 新手指南
android·kotlin·android jetpack
毕设源码-朱学姐7 小时前
【开题答辩全过程】以 基于安卓的停车位管理系统与设计为例,包含答辩的问题和答案
android
PWRJOY7 小时前
解决Flutter构建安卓项目卡在Flutter: Running Gradle task ‘assembleDebug‘...:替换国内 Maven 镜像
android·flutter·maven