51-ArrayList

51-ArrayList

Collection 类型介绍

仓颉中常用的几种基础 Collection 类型,包含 Array、ArrayList、HashSet、HashMap。

可以在不同的场景中选择适合对应业务的类型:

  • Array:如果不需要增加和删除元素,但需要修改元素,就应该使用它。
  • ArrayList:如果需要频繁对元素增删查改,就应该使用它。
  • HashSet:如果希望每个元素都是唯一的,就应该使用它。
  • HashMap:如果希望存储一系列的映射关系,就应该使用它。

下表是这些类型的基础特性:

类型名称 元素可变 增删元素 元素唯一性 有序序列
Array<T> Y N N Y
ArrayList<T> Y Y N Y
HashSet<T> N Y Y N
HashMap<K, V> K: N, V: Y Y K: Y, V: N N

ArrayList 初始化

需要先导入。

typescript 复制代码
import std.collection.*

ArrayList支持多种初始化方式

typescript 复制代码
package pro
import std.collection.*

main() {
    // 创建默认初始容量(10)的空字符串列表
    let a = ArrayList<String>()
    
    // 创建初始容量为100的空字符串列表
    let b = ArrayList<String>(100)
    
    // 从静态数组初始化Int64列表(元素0,1,2)
    let c = ArrayList<Int64>([0, 1, 2])
    
    // 拷贝构造函数:创建与列表c内容相同的副本
    let d = ArrayList<Int64>(c)
    
    // 使用生成函数初始化:创建容量为2的字符串列表
    // 通过lambda表达式将Int64值转换为字符串
    let e = ArrayList<String>(2, {x: Int64 => x.toString()})
}

ArrayList 初始化 访问

支持直接使用下标进行访问。

typescript 复制代码
let c = ArrayList<Int64>([0, 1, 2])
println(c[1])

通过size访问列表的长度。

typescript 复制代码
println(c.size)

可以通过forin访问列表内的所有成员。

typescript 复制代码
let list = ArrayList<Int64>([0, 1, 2])
for (i in list) {
    println("The element is ${i}")
}

ArrayList 初始化 修改

可以通过下标直接修改

typescript 复制代码
let list = ArrayList<Int64>([0, 1, 2])
list[0] = 3

ArrayList 初始化 增加

在列表末尾增加元素使用appendappendAll ,在指定位置插入元素使用insertinsertAll

typescript 复制代码
let list = ArrayList<Int64>()
list.append(0) // list contains element 0
list.append(1) // list contains elements 0, 1
let li = [2, 3]
list.appendAll(li) // list contains elements 0, 1, 2, 3


let list = ArrayList<Int64>([0, 1, 2]) // list contains elements 0, 1, 2
list.insert(1, 4) // list contains elements 0, 4, 1, 2

如果知道大约需要添加多少个元素,可以在添加之前预备足够的内存以避免中间重新分配,这样可以提升性能表现。

typescript 复制代码
    let list = ArrayList<Int64>(100) // Allocate space at once
    for (i in 0..100) {
        list.append(i) // Does not trigger reallocation of space
    }
    list.reserve(100) // Prepare more space
    for (i in 0..100) {
        list.append(i) // Does not trigger reallocation of space
    }

ArrayList 初始化 删除

使用remove方法指定位置删除

typescript 复制代码
let list = ArrayList<String>(["a", "b", "c", "d"]) // list contains the elements "a", "b", "c", "d"
list.remove(1) // Delete the element at subscript 1, now the list contains elements "a", "c", "d"
相关推荐
池央16 天前
librtp 实现详解:仓颉语言中的 RTP和RTCP 协议库开发实践
仓颉·librtp
爱睡觉的咋18 天前
探索仓颉编程语言:从Hello World到性能实战
仓颉
特立独行的猫a20 天前
仓颉编程语言的并发编程:线程模型与使用实践
华为·线程·仓颉·仓颉语言
L.EscaRC20 天前
仓颉(Cangjie)语言之网络编程浅析
网络·仓颉
在人间负债^22 天前
从Python到仓颉:核心项目内容迁移实践
开发语言·python·鸿蒙·仓颉
superman超哥24 天前
仓颉语言中流式I/O的设计模式深度剖析
开发语言·后端·设计模式·仓颉
特立独行的猫a1 个月前
仓颉语言宏(Cangjie Macros)详细介绍及强大使用
华为··鸿蒙·仓颉·仓颉语言
晨陌y1 个月前
深入剖析:仓颉语言的性能优化核心技术
android·性能优化·仓颉
七夜zippoe1 个月前
仓颉语言核心特性深度解析——现代编程范式的集大成者
开发语言·后端·鸿蒙·鸿蒙系统·仓颉
superman超哥1 个月前
仓颉语言中正则表达式引擎的深度剖析与实践
开发语言·后端·仓颉