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

相关推荐
阿pin14 小时前
Android随笔-AIDL
android·开发语言·aidl
2501_9160074715 小时前
Bundle ID 注册与管理 App ID 创建指南 命名规则 权限开关与删除注意事项
android·ios·小程序·https·uni-app·iphone·webview
雨白15 小时前
面向对象六大基本原则实战:从零重构支持引擎切换的网络框架
android·架构
天空之城--17 小时前
Android Flutter行业动态与学习参考(2026年8月)
android·flutter
quantdash_cc18 小时前
基于 QuantDash 5 分钟 K 线的网格交易策略参数网格搜索寻优实战
android·开发语言·pandas·量化·quantdash
杉氧19 小时前
原生交互:如何在 Flutter 中嵌入 Android/iOS 原生组件并解决手势冲突
android·flutter·dart
Android打工仔19 小时前
Continuation 的链式关系 —— 一个 suspend 函数如何把结果交还给调用者?
android·kotlin
hunterandroid19 小时前
[Android 从零到一] Kotlin Channel 与复杂并发场景:从生产者-消费者到结构化并发治理
android
FlightYe20 小时前
linux系统编程(八):阻塞与非阻塞IO对比
android·linux·运维·服务器·github·vim
恋猫de小郭20 小时前
Flutter iOS Deep Link 为什么会突然失效:一系列难以言喻的问题
android·前端·flutter