一、简单创建方式
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()