写点什么

HarmonyOS 5.0 应用开发——ArkTS 容器类

作者:高心星
  • 2024-12-10
    江苏
  • 本文字数:2158 字

    阅读完需:约 7 分钟

HarmonyOS 5.0应用开发——ArkTS容器类

【高心星出品】


容器类

线性容器类

线性容器实现能按顺序访问的数据结构,其底层主要通过数组实现,包括 ArrayList、Vector(已废弃)、List、LinkedList、Deque、Queue、Stack 七种。


ArrayList


一种数组对象,最简单的容器类型。


// arraylist元素export function arraylist() {  let al = new ArrayList()  // 末尾新增元素  al.add('str')  al.add(10)  // 某个位置插入元素  al.insert(true, 1)  // 循环遍历元素 for-of结构  for (const element of al) {    console.info(element+'   gxxt')  }  // foreach结构  al.forEach((value, index) => {    console.info(`${index}--${value}  gxxt`)  }, value => JSON.stringify(value))  // 更新某个元素的值  al[0] = 'str1'  //  查询是否有某个元素  let hasstr1 = al.has('str1')  console.info(hasstr1+'  gxxt')  // 移除元素  al.removeByIndex(0)  //   移除某个范围内的元素  al.removeByRange(0, 2)
}
复制代码


List


List 可用来构造一个单向链表对象,即只能通过头节点开始访问到尾节点。List 依据泛型定义,在内存中的存储位置可以是不连续的。


相对于 ArrayList,List 的插入删除效率要更优秀。


// list 单链表  export function list() {  let list = new List()  list.add('str')  list.add(1)  list.insert('ok', 1)  // 根据下标取出元素  let a = list.get(1)  //  取出头元素  let first = list.getFirst()  //  取出尾元素  let last = list.getLast()  // 更新某个下标对应的元素  list.set(1, 'gaga')  console.info(`gxxt ${a}, ${first}, ${last}`)
}
复制代码


list 容器通用 arraylist 容器,并有自己的方法。


LinkedList


使用方式和 List 是一样的,只不过 LinkedList 是双向链表,LinkedList 和 List 相比,LinkedList 是双向链表,可以快速地在头尾进行增删,而 List 是单向链表,无法双向操作。


Queue


Queue 可用来构造队列对象,存储元素遵循先进先出的规则。



export function queue(){  let que=new Queue()  // 队尾加入元素  que.add('str')  que.add(1)  que.add(true)  // 获取队首元素  let first=que.getFirst()  // 出队元素便返回  let ff=que.pop()  let ff1=que.pop()  console.info(`gxxt ${first}, ${ff}, ${ff1}`)}
复制代码


Stack


Stack 可用来构造栈对象,存储元素遵循先进后出的规则。



// stack 栈对象export function stack(){  let stack=new Stack()  // 压入栈  stack.push('str')  stack.push(1)  stack.push(true)  // 获取栈顶元素  let first=stack.peek()  // 出栈  let ff=stack.pop()  console.log('gxxt '+first+'  '+ff)  // 遍历stack  stack.forEach((item,index)=>{    console.log(item+'')  })
}
复制代码

非线性容器

HashMap


HashMap 可用来存储具有关联关系的 key-value 键值对集合,存储元素中 key 是唯一的,每个 key 会对应一个 value 值。


// hashmap  export function hashmap()  {    let hm=new HashMap()    // 增加元素 无序    hm.set('one','item1')    hm.set(2,'item2')    hm.set(3,'item3')  //   取出元素    if (hm.hasKey(2)) {      let value = hm.get(2)    }    // 取出所有的键    let keys=hm.keys()    for (const element of keys) {      console.info('gxxt '+element)    }    // 遍历所有的key和value    hm.forEach((key,value)=>{      console.info('gxxt  '+key+'=='+value)    },key=>JSON.stringify(key))    // 替换元素    hm.replace(1,'item11')    // 删除元素    hm.remove('one')  }
复制代码


TreeMap


TreeMap 可用来存储具有关联关系的 key-value 键值对集合,存储元素中 key 是唯一的,每个 key 会对应一个 value 值。


TreeMap 和 HashMap 相比,HashMap 依据键的 hashCode 存取数据,访问速度较快。而 TreeMap 是有序存取,效率较低。


// treemapexport function treemap() {  let tm = new TreeMap()  tm.set('one', 'item1')  tm.set(2, 'item2')  tm.set(3, 'item3')  //  treemap是有序的 所以可以  let fk = tm.getFirstKey()  let lk = tm.getLastKey()  console.info('gxxt  ' + fk + '  ' + lk)
}
复制代码


HashSet


HashSet 可用来存储一系列值的集合,存储元素中 value 是唯一的。


export function hashset(){  let hs=new HashSet()  // 增加元素  hs.add('item1')  hs.add('item2')  hs.add('item3')  // 获取集合中元素  let vs=hs.values()  for (const element of vs) {    console.info('gxxt '+element)  }  hs.forEach((value)=>{    console.info('gxxt '+value)  },value=>JSON.stringify(value))//   删除元素  hs.remove('item2')}
复制代码


TreeSet


TreeSet 可用来存储一系列值的集合,存储元素中 value 是唯一的。


TreeSet 和 HashSet 相比,HashSet 中的数据无序存放,而 TreeSet 是有序存放。它们集合中的元素都不允许重复,但 HashSet 允许放入 null 值,TreeSet 不建议插入空值,可能会影响排序结果。


// treesetexport function treeset(){  let ts=new TreeSet()  ts.add('item1')  ts.add('item2')  ts.add('item3')  // 获取第一个元素  let fv=ts.getFirstValue()  // 获取最后一个元素  let lv=ts.getLastValue()  console.info('gxxt '+fv+'=='+lv)}
复制代码


发布于: 刚刚阅读数: 2
用户头像

高心星

关注

天将降大任于斯人也,必先苦其心志。 2024-10-17 加入

华为开发者专家(HDE)。 10年教学经验,兼任多家科技公司技术顾问。先后从事JavaEE项目开发、Python爬虫、HarmonyOS移动应用开发等课程的教学工作。参与开发《鸿蒙应用开发基础》和《鸿蒙项目实战》等课程。

评论

发布
暂无评论
HarmonyOS 5.0应用开发——ArkTS容器类_容器_高心星_InfoQ写作社区