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

相关推荐
DeBuggggggg33 分钟前
centos 7.6安装mysql8
android
浩浩测试一下2 小时前
渗透信息收集- Web应用漏洞与指纹信息收集以及情报收集
android·前端·安全·web安全·网络安全·安全架构
移动开发者1号3 小时前
深入理解原子类与CAS无锁编程:原理、实战与优化
android·kotlin
陈卓4103 小时前
MySQL-主从复制&分库分表
android·mysql·adb
移动开发者1号3 小时前
深入理解 ThreadLocal:原理、实战与优化指南
android·kotlin
zhangphil3 小时前
Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算
android
厦门德仔4 小时前
【WPF】WPF(样式)
android·java·wpf
aqi004 小时前
FFmpeg开发笔记(七十二)Linux给FFmpeg集成MPEG-5视频编解码器EVC
android·ffmpeg·音视频·流媒体
纳兰青华6 小时前
bean注入的过程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘
java·开发语言·spring·list
Devil枫6 小时前
Kotlin高级特性深度解析
android·开发语言·kotlin