网站首页 > java教程 正文
随着Google大力推行Flutter,Dart语言变得越来越流行。在移动跨端开发方面,Flutter有着很好的优势,无论性能还是跨平台移植方面。Dart语言是强类型语言,语法上跟JS和Java非常像。下面以数组去重算法为例来展示下Dart语言的特性。
数组去重复的基本概念
从一个数组列表中,去掉重复的项,保证该列表中的各项都是独一无二的。比如[1,2,2,3,4,5,4,5]要变成[1,2,3,4,5]。
算法实现的基本思路
遍历数组中的每一项,并将当前项与其他剩余项逐个进行比较,遇到相同则移除掉当前项,依次删除全部重复的项目。以下按照循环遍历、数据结构、先排序再去重、递归等几种方式分别来说下实现的方式。
- 循环遍历删除重复项
以上方式,主要是通过双层循环来逐个与其他项目对比,然后移除重复项。从以上可以看出dart与js代码几乎一致,可以用var定义变量, 循环与判断等几乎一样,函数也无需指定返回类型。相比于java,dart也是强类型语言,只不过可以定义dynamic动态类型。
- 添加非重复项到新数组
以上方式新建了一个数组来存放不重复项,也就是拿每一项跟新数组里的项去比较,如果不存在重复就添加到新数组中。这种方式很好理解,不足就是开辟了一个新数组空间。以上代码写法上与js几乎一致。
- 利用数据结构特性来去重
以上是利用数据结构中set不允许重复项的特点来达到去重复的目的,与算法无关了,非常简单好用。map的key值是唯一的,因此也可以利用这个原理来实现去重复。
- 先排序再去重复
这里利用的是将数组先排好序,然后再挨个比较去掉重复项。也可以利用reduce来比较前后项,reduce函数主要用于集合中元素依次归纳(combine),可以用来累加或累乘,这个也是参照的js语言。
- 利用递归移除或追加到新数组中
以上两种方式是利用递归来替代for循环,基本效果与for循环没啥区别。后面的递归例子展示了如何拼接递归结果,这个方式与js也基本一样。
- 验证程序
随意构造含有重复项的数组,写几个测试用例,运行后可以看到结果已经去掉了重复项。
总结
通过数组去重算法基本展示了Dart语言的特点,可以发现Dart是一门强类型、类C风格的编程语言,其写法上与JS和Java非常像。其数组去重复的算法也有很多种方式,用不同的方式来实现有助于我们更好地掌握这门语言。
- 上一篇: 前端30秒代码-使用set实现数组去重
- 下一篇: 前端最全数组去重,面试必备
猜你喜欢
- 2024-11-22 Excel多列去重的两种方式
- 2024-11-22 js 数组去重复
- 2024-11-22 想要优雅的Excel数据去重,还得是unique函数
- 2024-11-22 自从学了深入解析java虚拟机:FullGC和字符串去重后,我无敌了
- 2024-11-22 携程 & 蘑菇街 & bilibili:手写数组去重、扁平化函数
- 2024-11-22 java数组的拷贝及Arrays类
- 2024-11-22 简单学Python——NumPy库7——排序和去重
- 2024-11-22 VBA数组与字典解决方案第44讲:利用字典排重,并提取不重复值
- 2024-11-22 php怎么用array_unique()函数去除数组中重复的值?
- 2024-11-22 List怎么去重?还只会用Set互换吗?一篇文章帮你打开“新世界”
你 发表评论:
欢迎- 最近发表
-
- 五,网络安全IDA Pro反汇编工具初识及逆向工程解密实战
- 「JAVA8」- Lambda 表达式(java lambda表达式原理)
- 深入探讨Java代码保护:虚拟机保护技术的新时代
- Nginx反向代理原理详解(图文全面总结)
- 逆向拆解日本IT,哪些Java技术栈薪资溢价高
- mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比
- Spring Boot集成ProGuard轻松实现Java 代码混淆, Java 应用固若金汤
- 从 Java 代码逆向工程生成 UML 类图和序列图
- 人与人相处:尊重是标配,靠谱是高配,厚道是顶配
- Windows系统安装日期如何修改(windows10怎么修改安装日期)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)