ArtTS语言基础类库-容器类库内容的学习(2.10.2)

上篇回顾:ArtTS语言基础类库内容的学习(2.10.1)

本篇内容:ArtTS语言基础类库-容器类库内容的学习(2.10.2)

一、知识储备

线性容器特点对比

名称使用场景特点
ArrayList需要频繁读取集合中的元素时,推荐使用要求存储位置是一片连续的内存空间,初始容量为10,并动态扩容,每次扩容为原始容量的1.5倍
Vector和ArrayList类似,满足用户更多场景下的需求同为基于数组实现,多了get/set接口,每次扩容为原始容量的2倍,api9开始不再维护
List当需要频繁的插入删除时,推荐使用List高效操作单向链表对象,只能通过头节点开始访问到尾节点,在内存中位置不要必须连续,
LinkedList当需要频繁的插入删除时,推荐使用LinkedList高效操作和List相比,此为双向链表结构,可以快速地在头尾进行增删,
Deque需要频繁在集合两端进行增删元素的操作时,推荐使用Deque。双端队列对象,遵循先进先出以及先进后出的规则,双端队列可以分别从队头或者队尾进行访问。要求存储位置是一片连续的空间,初始容量为8,动态扩容,扩容大小是原来容量的2倍。底层采用循环队列实现,入队和出队操作效率都比较高
Quque先进先出的场景可以使用和Deque相比,只能在一端删除一端增加,其他与deque相同
Stack先进后出的场景可以使用Stack和deque相比,只能在一端删除,另一端插入,

非线性容器特点对比

名称使用场景特点
HashMap需要快速存取、删除以及插入键值对数据时,推荐使用HashMapkey唯一,集合中通过key的hash值确定其存储位置,从而快速找到键值对,初始容量为16,动态扩容为原始容量2倍,底层基于HashTable实现,冲突策略采用链地址法。
HashSet复用不重复的特性,当需要不重复的集合或去重某个集合的时候使用基于HashMap实现,存储元素value唯一,集合中通过value的hash值确定其存储位置,从而快速找到该值。其他与HashMap一样,无序
TreeMap需要存储有序键值对的场景使用key唯一,有序,底层是红黑树。可以进行快速的插入和删除,效率较低
TreeSet需要存储有序集合的场景使用value唯一,value值有序,底层基于红黑树,可以快速的插入和删除
LightWeightMap当需要存取key-value键值对时推荐使用轻量级HashMap,初始容量为8,动态扩容为原始容量2倍,冲突策略为线性探测法。集合中的key值的查找依赖于hash值以及二分查找算法,通过 一个数组存储hash值,然后遇到 其他的key值以及value值。
LightWeightSet当需要存取某个集合或是对某个集合去重时,推荐使用轻量级HashSet,初始容量为8,动态扩容为原始容量2倍,集合中的value值 的查找依赖于hash以及二分查找算法,通过一个数组存储hash值,然后映射到其他数组中的value值。冲突策略为线性探测法
PlainArray当需要存储key值为number类型的键值对时,可以使用key只能 是number,初始容量为16,其他与LightWeightMap相同

二、效果一览

三、源码剖析

import ArrayList from '@ohos.util.ArrayList'
import Vector from '@ohos.util.Vector'
import Deque from '@ohos.util.Deque'
import Stack from '@ohos.util.Stack'
import List from '@ohos.util.List'

function init() {

  let arrayList = new ArrayList()
  arrayList.add(1)
  arrayList.add(2)
  console.error(`${arrayList[0]}`)
  arrayList[0] = 3;
  console.error(`${arrayList[0]}`)
  arrayList.removeByIndex(0)
  console.error(`${arrayList[0]}`)

  let vector = new Vector() //过时,不建议使用
  vector.add([1, 2, 3])
  vector.add(1)
  console.error(`vector : ${vector[0]}`)
  console.error(`vector : ${vector.getFirstElement()}`)


  let deque = new Deque()
  deque.insertEnd(2)
  deque.insertFront(1)
  console.error(`deque: ${deque[0]}`)
  deque[0] = 'abc'
  console.error(`deque: ${deque[0]}`)

  let stack = new Stack()
  stack.push(1)
  stack.push(2)
  console.error(`stack: ${stack[0]}`)
  stack.pop()
  console.error(`stack: ${stack[0]}`)
  stack.peek()
  console.error(`stack: ${stack[0]}`)


  let list = new List()
  list.add(1)
  list.add('abc')
  console.error(`list: ${list.get(0)}`)
}

@Entry
@Component
struct Index {
  aboutToAppear() {
    init();
  }

  build() {
    Column() {

    }
  }
}

import HashMap from '@ohos.util.HashMap'
import TreeMap from '@ohos.util.TreeMap'
import LightWeightMap from '@ohos.util.LightWeightMap'
import PlainArray from '@ohos.util.PlainArray'

function init() {
  let hashMap = new HashMap()

  hashMap.set('a', 123)
  hashMap.set(11, 123)
  console.error(`hashMap: ${hashMap.hasKey(11)}`)
  console.error(`hashMap: ${hashMap.get(11)}`)

  let treeMap = new TreeMap()
  treeMap.set('a', 123)
  treeMap.set(11, 123)
  console.error(`treeMap: ${treeMap.get(11)}`)
  console.error(`treeMap: ${treeMap.getFirstKey()}`)
  console.error(`treeMap: ${treeMap.getLowerKey(11)}`)

  let lightWeightMap = new LightWeightMap()
  lightWeightMap.set('a', 123)
  lightWeightMap.set(11, 123)
  console.error(`lightWeightMap: ${lightWeightMap.get(1)}`)
  console.error(`lightWeightMap: ${lightWeightMap.getIndexOfKey(11)}`)

  let plainArray = new PlainArray()
  plainArray.add(1, 123)
  plainArray.add(11, 123)
  console.error('plainArray: ' + plainArray.get(1))
  console.error('plainArray: ' + plainArray.getKeyAt(1))

}


@Entry
@Component
struct Index {
  aboutToAppear() {
    init();
  }

  build() {
    Column()
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/760087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

isspace()方法——判断字符串是否只由空格组成

自学python如何成为大佬(目录): https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isspace()方法用于判断字符串是否只由空格组成。isspace()方法的语法格式如下: str.isspace() 如果字符串中只包含空格&…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式,看到两本比较适合入门的书,一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式,因此很值得学习 本…

【算法】5分钟了解如何使用PCA主成份分析

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是PCA1.1.PCA的思想1.2.PCA的数学表示 二、什么是PCA的主成份与方差2.1.主成份的方差2.2.主成份的命名 三、如何使用PCA3.1.主成份的代码实现 主成份分析全称为PCA Principle Component Analysis ,它的主…

Linux虚拟串口设置

VSPD虚拟串口软件安装及使用 一、软件安装 1、Configure Virtual Serial Port Driver(VSPD) 1.1 首先下载 Configure Virtual Serial Port Driver(VSPD) 软件 链接:https://pan.baidu.com/s/11aGc2aHGUew5QZ0XhaWXJw 提取码:rmd7 1.2 安装时注意将…

计算机基础之汇编语言学习笔记

学习来源:b站各种学习资料 前置知识:计算机组成原理等知识 学习参考的资源 汇编语言编程的速成指南[上]~从零开始的期末抢救计划 (8086汇编)_哔哩哔哩_bilibili 链接: https://pan.baidu.com/s/1tg_ZW7VD3TS_s1v_EjS89w?pwdak6…

2029年AI服务器出货量将突破450万台,AI推理服务器即将爆发式增长

在2020年,新冠疫情与远程办公模式的兴起推动了所有类型服务器的出货量达到峰值,随后几年里,除了AI服务器之外的所有类别都回归到了正常水平。 根据Omdia的研究数据,AI服务器的出货量在2020年急剧上升,并且至今未显示出…

运筹系列93:VRP精确算法

1. 基础版本 定义 x i j k x_{ijk} xijk​为边 i j ij ij是否由车辆 k k k去运输。如果有时间窗约束的话,再加上一个变量 c i k c_{ik} cik​即可,表示第k辆车到达节点i时的时间点。 第一类客户流量约束,要求每个点都有1个入度和1个出度&…

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能,但其适用于ipad,不适用于iphone,因为iphone不支持多窗口功能。注意,这里说的窗口不是UIWindow,而是UIWindowScene。 ios13前后的app的UI架…

AI陪伴产品的情感设计:从孤独感到恋爱感评分:9/10

本文主要阐述三个话题: 1. 市面上有哪些AI陪伴产品? 2. 我们团队要怎么做? 3. 为什么要做? 市面上有哪些陪伴类产品? Role-play(角色扮演) 在当前市场上,有不少以角色扮演为核心的…

Wails 安装初体验

文章目录 Wails 安装说明1. 系统要求2. 安装步骤3. 构建应用 结论 Wails 安装说明 Wails 是一个用于构建桌面应用的 Go 框架,结合了现代前端技术。以下是安装步骤: 1. 系统要求 Go 1.16 或更高版本Node.js 和 npm可选:适用于 Windows、mac…

iconfont-阿里巴巴矢量图标库 在vue项目使用记录

官网地址:https://www.iconfont.cn/manage/index?manage_typemyprojects&projectId4539761 第一步: 下载资源 ->解压到项目文件夹 第二步 在项目中main.ts 或者main.js 引入资源 import //assets/iconfont/font/iconfont.js; import //assets…

java基础知识点全集

JAVA的所有知识点 一、基础的数组、数据类型、输入输出二、类与对象1. 三大特征(1) 封装(2)继承(3)多态 2. 类的实例化(1) 类通过NEW来创建(2) 类的继承&…

python解锁图片相似度的神奇力量

在这个信息爆炸的时代,图片成为了我们传递信息、表达情感和记录生活的重要方式。然而,面对海量的图片资源,如何快速准确地找到相似的图片,成为了一个亟待解决的问题。现在,让我们为您揭开图片相似度的神秘面纱,带您领略这一创新技术的魅力! 图片相似度技术,就像是一位…

【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】

在Java中播放视频可以使用多种方案,最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过,JMF已经不再被推荐使用,而Xuggler是基于DirectX的,不适用于跨平台。而且上述方案都需要使用第三方库。…

医院管理系统带万字文档医院预约挂号管理系统基于spingboot和vue的前后端分离java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档(9.9¥带走) 仓库管理系统 一、项目演示 医院管理系统 二、项目介绍 基于springbootvue的前后端分离医院管…

QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List(一)——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net) QListView自定义Item_qlistview 自定义item-CSDN博客 结合我写的上一篇文章: QTableView与QSqlQueryModel的简单使用-CSDN博客 这次尝试…

webStorm debug vue项目的两种方案

一、前言 本文将介绍通过webstorm对vue项目进行debugger调试的两种方案。 但是,不管通过那种方案,都无法达到类似后端idea调试的体验,感觉十分难受,不过,比起用console.log还是好一些。如果各位有更好的方案&#xf…

扩展阅读:什么是中断

如果用一句话概括操作系统的原理,那就是:整个操作系统就是一个中断驱动的死循环,用最简单的代码解释如下: while(true){doNothing(); } 其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成的。我们点击一下鼠标,敲击一下键盘,执行一个程序,…

马斯克的SpaceX发展历史:从濒临破产到全球领先

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Space Exploration Technologies Corp.,简称SpaceX,是由埃隆马斯克(Elon Musk)于2002年创办的一…

观察者模式在金融业务中的应用及其框架实现

引言 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,使得多个观察者对象同时监听某一个主题对象。当这个主题对象发生变化时,会通知所有观察者对象,使它们能够自动更新。…