Android 之 List 简述

news/2024/12/25 10:00:15 标签: 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


http://www.niftyadmin.cn/n/5798949.html

相关文章

抖音视频下载去水印工具推荐

下载抖音视频并去水印的工具有很多&#xff0c;下面推荐几种常用且有效的方法。请注意&#xff0c;下载和去水印的视频需遵守版权和平台规定&#xff0c;避免侵犯原创者权益。 在线工具 这些工具无需安装&#xff0c;可以直接在浏览器中使用&#xff0c;操作简单&#xff1a;…

【Chrome】浏览器提示警告Chrome is moving towards a new experience

文章目录 前言一、如何去掉 前言 Chrome is moving towards a new experience that allows users to choose to browse without third-party cookies. 这是谷歌浏览器&#xff08;Chrome&#xff09;关于隐私策略更新相关的提示 提示&#xff1a;以下是本篇文章正文内容&…

步进电机位置速度双环控制实现

步进电机位置速度双环控制实现 野火stm32电机教学 提高部分-第11讲 步进电机位置速度双环控制实现(1)_哔哩哔哩_bilibili PID模型 位置环作为外环,速度环作为内环。设定目标位置和实际转轴位置的位置偏差,经过位置PID获得位置期望,然后讲位置期望(位置变化反映了转轴的速…

[机器学习]sklearn入门指南(1)

简介 scikit-learn&#xff08;简称sklearn&#xff09;是一个开源的Python机器学习库&#xff0c;它提供了简单而高效的工具用于数据挖掘和数据分析&#xff0c;并且拥有一个活跃的开发社区。它建立在NumPy、SciPy和matplotlib这些科学计算库之上&#xff0c;旨在提供一致且可…

【vue】圆环呼吸灯闪烁效果(模拟扭蛋机出口处灯光)

效果图先发&#xff1a; 页面部分&#xff1a; <div ref"round" class"round"><div class"light" ref"light"/><div class"box"></div></div>js部分(控制圆环生成&#xff09;; setRound…

解释 Python 中的装饰器及其作用?

一、装饰器的基本概念 装饰器本质上是一个函数&#xff0c;它接受一个函数作为参数&#xff0c;并返回一个新的函数。 这个新的函数通常会在原函数的基础上添加一些额外的功能&#xff0c;比如日志记录、权限验证、性能统计等。 装饰器的语法糖形式为decorator_name&#xf…

微信小程序中momentjs无法切换中文问题处理

微信小程序中momentj.s无法切换中文问题处理. 表现为 使用 locale(“zh-cn”)无效。 处理方法 # 1、先删除 miniprogram_npm\moment\index.js # 2、将 node_modules\moment\min\moment-with-locales.min.js 复制到 miniprogram_npm\moment下 并重命名为index.js # 3、修改mi…

Apache解析漏洞(apache_parsing_vulnerability靶场攻略CVE-2017-15715靶场攻略)

apache_parsing_vulnerability靶场 Apache HTTPD ⽀持⼀个⽂件拥有多个后缀&#xff0c;并为不同后缀执⾏不同的指令 只要文件的后缀中存在相应的后缀&#xff0c;那么就会自动识别并执行 我们向靶场上传 111.jpg.xxx.php.gif 上传成功后会显示文件所在的路径&#xff0c;我…