当前位置: 首页 > news >正文

Dart语言的数据结构

Dart语言中的数据结构探讨

引言

Dart是一种现代化的编程语言,主要用于构建移动应用、Web应用和服务端应用。随着应用程序的复杂性日益增加,选择合适的数据结构显得尤为重要。数据结构不仅影响程序的性能,也影响程序的可维护性和可扩展性。本文将深入探讨Dart中的常用数据结构,包括列表(List)、集合(Set)、映射(Map)以及它们的特性、适用场景和使用示例。

1. Dart中的列表(List)

1.1 概述

列表(List)是Dart中最常用的数据结构之一,它是一组有序的对象集合。你可以通过索引访问其中的元素,索引从0开始。列表可以包含多种类型的元素,包括基本数据类型和自定义对象。

1.2 创建列表

在Dart中,可以通过多种方式创建列表:

```dart // 创建一个空列表 List emptyList = [];

// 创建一个带初始值的列表 List fruits = ['苹果', '香蕉', '橙子'];

// 使用构造函数创建列表 List numbers = List .filled(5, 0); // 创建一个长度为5的列表,初始值为0 ```

1.3 列表的常用操作

  • 访问元素:通过索引访问元素 dart print(fruits[1]); // 输出:香蕉

  • 添加元素:使用add方法或insert方法 dart fruits.add('梨'); // 添加元素到末尾 fruits.insert(1, '草莓'); // 在指定位置插入元素

  • 删除元素:使用removeremoveAt方法 dart fruits.remove('香蕉'); // 根据值删除 fruits.removeAt(0); // 根据索引删除

  • 遍历列表:使用forEach或for循环 dart fruits.forEach((fruit) { print(fruit); });

1.4 适用场景

列表非常适合处理有序数据。如果你需要频繁地访问或操作数据,比如动态管理用户的购物车、产品列表等,列表就是一个很好的选择。

2. Dart中的集合(Set)

2.1 概述

集合(Set)是一种无序、不重复的对象集合。Dart中的集合用于存储唯一的对象。与列表不同,集合不允许有重复的元素。

2.2 创建集合

创建集合的方法如下:

```dart // 创建一个空集合 Set emptySet = {};

// 创建带初始值的集合 Set numbersSet = {1, 2, 3, 3, 4}; // 3会被重复过滤掉 ```

2.3 集合的常用操作

  • 添加元素:使用addaddAll方法 dart numbersSet.add(5); // 添加单个元素 numbersSet.addAll({6, 7, 7}); // 添加多个元素,7会被忽略

  • 删除元素:使用removeclear方法 dart numbersSet.remove(2); // 根据值删除 numbersSet.clear(); // 清空集合

  • 集合的运算:如交集、并集、差集 dart Set<int> anotherSet = {3, 4, 5}; Set<int> intersection = numbersSet.intersection(anotherSet); // 交集 Set<int> union = numbersSet.union(anotherSet); // 并集 Set<int> difference = numbersSet.difference(anotherSet); // 差集

2.4 适用场景

集合常用于需要确保无重复元素的场合,如用户的权限管理、投票系统等。此外,由于集合的查找性能较好,因此也适合用于需要频繁查找的场景。

3. Dart中的映射(Map)

3.1 概述

映射(Map)是一种键值对的数据结构,其中每个键(key)都是唯一的。通过键可以快速访问对应的值(value)。在Dart中,映射是一种重要的数据结构,用于存储相关联的数据。

3.2 创建映射

创建映射的方法如下:

```dart // 创建一个空映射 Map emptyMap = {};

// 创建带初始值的映射 Map ageMap = {'Alice': 30, 'Bob': 25}; ```

3.3 映射的常用操作

  • 添加和修改键值对:直接通过键访问并赋值 dart ageMap['Charlie'] = 28; // 添加新键值对 ageMap['Alice'] = 31; // 修改已有键的值

  • 查找值:通过键访问值 dart print(ageMap['Bob']); // 输出:25

  • 删除键值对:使用remove方法 dart ageMap.remove('Bob'); // 删除键'Bob'及其对应的值

  • 遍历映射:使用forEach方法 dart ageMap.forEach((key, value) { print('$key: $value'); });

3.4 适用场景

映射非常适合用于存储关联数据,如用户信息、产品ID和名称的映射等。它的查找速度快,尤其在处理大量数据时,能够显著提高性能。

4. Dart中的其他数据结构

除了列表、集合和映射之外,Dart还支持其他一些数据结构,如队列(Queue)、栈(Stack)等。虽然它们不是Dart语言的核心部分,但可以利用Dart的dart:collection库轻松实现。

4.1 队列(Queue)

队列是一种先进先出的数据结构。Dart的Queue类可以用于实现队列。

```dart import 'dart:collection';

void main() { Queue queue = Queue (); queue.add('第一个'); queue.add('第二个'); print(queue.removeFirst()); // 输出:第一个 } ```

4.2 栈(Stack)

栈是一种先进后出的数据结构,虽未在Dart中直接提供,但可以使用列表实现。

dart void main() { List<int> stack = []; stack.add(1); // 压栈 stack.add(2); print(stack.removeLast()); // 输出:2,弹栈 }

5. 性能与选择

在选择数据结构时,考虑性能是非常重要的。不同的数据结构在不同的操作中表现不同。以下是一些常见操作的性能比较:

| 数据结构 | 添加元素 | 删除元素 | 查找元素 | 空间复杂度 | |----------|----------|----------|----------|------------| | List | O(1) | O(n) | O(n) | O(n) | | Set | O(1) | O(1) | O(1) | O(n) | | Map | O(1) | O(1) | O(1) | O(n) |

可以看到,集合和映射在查找和删除操作上性能优越,而列表在添加元素时更为高效。因此,选择合适的数据结构需要根据具体的应用场景和需求进行分析。

6. 结论

Dart语言为开发者提供了丰富的数据结构选择,适用于不同的场景与需求。掌握这些数据结构的特性及其操作不仅能使代码更加简洁和高效,还能提升程序的性能和可维护性。在设计数据结构时,考虑性能和可读性,选择合适的数据结构,将是每个开发者值得思考的问题。

希望本文对Dart语言中的数据结构有一个全面的了解,能够帮助读者在实际开发中作出更好的选择。如果你对Dart中的数据结构有进一步的兴趣或疑问,欢迎进一步探讨!

相关文章:

Dart语言的数据结构

Dart语言中的数据结构探讨 引言 Dart是一种现代化的编程语言&#xff0c;主要用于构建移动应用、Web应用和服务端应用。随着应用程序的复杂性日益增加&#xff0c;选择合适的数据结构显得尤为重要。数据结构不仅影响程序的性能&#xff0c;也影响程序的可维护性和可扩展性。本…...

TabPFN - 表格数据基础模型

文章目录 一、关于 TabPFN&#x1f310;TabPFN生态系统 二、快速入门&#x1f3c1;1、安装2、基本用法 三、使用技巧&#x1f4a1;四、开发&#x1f6e0;️1、设置环境2、在提交之前3、运行测试 一、关于 TabPFN TabPFN是表格数据的基础模型&#xff0c;它优于传统方法&#x…...

AOF日志:宕机了Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的&#xff1f;三种写回策略日志文件太大了怎么办&#xff1f;AOF 重写会阻塞吗?小结每课一问 更多redis相关知识 如果有人问你&#xff1a;“你会把 Redis 用在什么业务场景下&#xff1f;”我想你大概率会说&#xff1a;“我会把它当作缓存使用&…...

MAC上安装Octave

1. 当前最新版Octave是9.3版本&#xff0c;需要把mac os系统升级到14版本&#xff08;本人之前的版本是10版本&#xff09; https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档&#xff1a;Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…...

C 语言中二维数组的退化

目录 1. 一维数组的退化 2.字符串数组的退化 3. 二维数组的退化 3.1 为什么退化为 int (*)[4] 而不是 int **&#xff1f; 3.2举例说明 3.3 .总结 在 C 语言中&#xff0c;数组名在大多数情况下会退化为指向其第一个元素的指针&#xff0c;这种机制称为数组退化&#xf…...

Notion 推出捏脸应用 | Deving Weekly #15

CEF-Detector-X 现在 Chromium 占据了桌面应用的大壁江山&#xff0c;典型的有 Electron 框架&#xff0c;底层就是基于 Chromium 内核&#xff0c;上百 M 的臃肿包体积一直别人诟病。 CEF-Detector-X 可以检测你电脑有多少个 基于 Chromium 应用&#xff0c;并且会生成一份「…...

C# Linq 查询

1.Linq 查询表达式基础 Linq 查询应用程序始终将源数据视为 IEnumerable<T> 或 IQueryable<T> 集合。 LINQ查询表达式包含8个基本子句,分别为from、select、group、where、orderby、join、let和into。 子 句备注from指定数据源和范围变量select指定当执行查询…...

ES7【2016】、ES8【2017】新增特性

ES7【2016】新增特性 幂指数操作符 在ES7【2016】中新增了幂指数操作&#xff0c;幂指数操作符是**。它用于指数计算 基本语法&#xff1a;baseValue ** exponent 参数说明&#xff1a;baseValue是基数&#xff0c;exponent是指数。 let base 2; let exponent 4; let resul…...

64细分步进电机驱动器TMC2209

封装和丝印 典型电路1 典型电路2 应用 兼容设计升级 3D 打印机 打印机、POS 办公和家庭自动化 纺织、缝纫机 闭路电视&#xff0c; 安保 ATM&#xff0c; 现金回收机 暖 通 空调 电池供电设备 特点和优势 2 相步进电机&#xff0c;线圈电流&#xff08;峰值&#xff09;高达…...

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中&#xff0c;字体的选择和使用对最终作品的质量有着重要影响。然而&#xff0c;有时我们可能会遇到包含未知字体的PDF文件&#xff0c;这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题&#xff0c;让我们能够更好地处理这些文件。…...

linux 安装PrometheusAlert配置钉钉告警

在 Linux 上安装 PrometheusAlert 并配置钉钉告警的步骤如下: 1. 准备工作 钉钉机器人: 在钉钉群中创建一个机器人,获取 Webhook URL。示例 Webhook URL:https://oapi.dingtalk.com/robot/send?access_token=your_dingtalk_token。PrometheusAlert 安装包: 从 Prometheus…...

【华为路由/交换机的ssh远程设置】

华为路由/交换机的ssh远程设置 R1&#xff08;client&#xff09;&#xff1a;10.1.1.1 R2&#xff08;server&#xff09;&#xff1a;10.1.1.2 R2服务端配置&#xff1a; 生成本机密钥 查看生成的密钥 设置AAA授权验证方式&#xff0c;并设置支持SSH协议 创建本地用户&…...

性能测试 - Locust WebSocket client

Max.Bai 2024.10 0. 背景 Locust 是性能测试工具&#xff0c;但是默认只支持http协议&#xff0c;就是默认只有http的client&#xff0c;需要其他协议的测试必须自己扩展对于的client&#xff0c;比如下面的WebSocket client。 1. WebSocket test Client “”“ Max.Bai W…...

html中鼠标位置信息

pageX&#xff1a;鼠标距离页面的最左边的距离&#xff0c;包括滚动条的长度。clientX&#xff1a;鼠标距离浏览器视口的左距离&#xff0c;不包括滚动条。offsetX&#xff1a;鼠标到事件源左边的距离。movementX&#xff1a;鼠标这次触发的事件的位置相对于上一次触发事件的位…...

kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试

序言&#xff1a; 在大型电商、购物、直播活动期间&#xff0c;对于火爆流量的激增&#xff0c;如何保障业务稳定并且做到资源不浪费&#xff0c;自动回收。 场景&#xff1a;kubernetes 原生容器化承载业务流量&#xff08;非云环境&#xff09; 方案&#xff1a;kubernetes自…...

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…...

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)

在上一篇文章中&#xff0c;完成了电影列表页的开发。接下来&#xff0c;将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息&#xff0c;包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件&#xff0c;并结合第三方库 nutpi/axios 来实现…...

hive表修改字段类型没有级连导致历史分区报错

一&#xff1a;问题背景 修改hive的分区表时有级连概念&#xff0c;指字段的最新状态&#xff0c;默认只对往后的分区数据生效&#xff0c;而之前的分区保留历史元数据状态。好处就是修改语句的效率很快&#xff0c;坏处就是如果历史分区的数据还有用&#xff0c;那就回发生分…...

云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破

在信息技术应用创新的浪潮中&#xff0c;仓颉社区吸引了众多企业和开发者的积极参与&#xff0c;已有多个应用成功落地&#xff0c;展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用&#xff0c;并颁发…...

JS宏进阶:JS宏中的文件系统FileSystem

FileSystem对象中包含文件和文件夹的一些基本和常见的操作接口。比如&#xff1a;判断路径是否存在、创建文件夹、创建文件、读取文件等等。他的出现可以取代文件流对txt或csv等文件的操作。官方文档网址&#xff1a;https://open.wps.cn/previous/docs/client/wpsLoad&#xf…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...