ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 时间的音符

[分享] 关于collection是否适合当作栈?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-24 10:53 | 显示全部楼层
micch 发表于 2024-2-24 10:46
同样从尾部一个一个删除,时间也不一样。不过不管怎么说,如果有10万个元素,用集合本身就不适合了

这是我基于数组实现的.

Stack因为是尾删 速度快.
Queue因为是头删, 我用的是两个栈实现一个队列,把头删优化成尾删,速度也还行.
baseStack和baseQueue是直接开个大数组,双指针实现的,但是很浪费空间,而且可能超出数组内存.

数组.zip

26.67 KB, 下载次数: 1

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-24 11:00 | 显示全部楼层
本帖最后由 wanghan519 于 2024-2-24 11:46 编辑
时间的音符 发表于 2024-2-24 10:38
collection可以头部插入吗? 如果可以那么就可以当成栈和队列使用了.

可以的,add方法的第三个参数是before
头部插入和删除都很快,就是个栈
但必须保证有一个元素,再开始头部插入,比较怪。。。


批注 2024-02-24 105815.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-24 11:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wanghan519 发表于 2024-2-24 11:00
可以的,add方法的第三个参数是before
头部插入和删除都很快,就是个栈
但必须保证有一个元素,再开始 ...

确实可以,以前都不知道啊.牛.
可以直接把collection当成栈和队列了.

TA的精华主题

TA的得分主题

发表于 2024-2-24 11:09 | 显示全部楼层
所以,如果集合确实是头快尾慢,那么集合就适合用做队列?
比如,做先进先出进销存,就时候用集合来处理出库??

TA的精华主题

TA的得分主题

发表于 2024-2-24 11:13 | 显示全部楼层
如果是栈,可以考虑用数组。 一种是大数组,记录层数,实现出入栈;一种是可以用redim preserve来处理数组。
一种是占空间比较大,一种是速度会有一点慢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-24 11:13 | 显示全部楼层
micch 发表于 2024-2-24 11:09
所以,如果集合确实是头快尾慢,那么集合就适合用做队列?
比如,做先进先出进销存,就时候用集合来处理出 ...

先进先出是指数据先进去的先弹出,跟进销存关系我不太了解.

TA的精华主题

TA的得分主题

发表于 2024-2-24 11:18 | 显示全部楼层
本帖最后由 micch 于 2024-2-24 11:19 编辑
时间的音符 发表于 2024-2-24 11:13
先进先出是指数据先进去的先弹出,跟进销存关系我不太了解.

嗯,有一些情况下,出库的时候,要根据入库的顺序,先入库的先出库或者是快到保质期的优先出库,比如生鲜类库存,考虑保质期。

一般也不会考虑速度,所以我写代码,基本就是提取所有库存,然后按优先级排序后减库存。

如果,用集合来处理数据。那么逻辑应该是:

第一步先读取库存数据,在筛选需要出库的品类时,用集合存储当前库存,记录时用集合按入库日期或者说保质期的顺序进入集合,然后减库存的时候,从集合头部开始逐个库存去减。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-24 11:26 | 显示全部楼层
micch 发表于 2024-2-24 11:18
嗯,有一些情况下,出库的时候,要根据入库的顺序,先入库的先出库或者是快到保质期的优先出库,比如生鲜 ...

可以考虑一下优先队列..

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-25 18:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可以肯定collection是链表构成的,collection读取也非常慢,没有数组快.
我经常用collection,难怪的写的代码状态太多的话会好慢.
添加.png
顺序读取.png
边删边读.png

TA的精华主题

TA的得分主题

发表于 2024-2-25 19:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
时间的音符 发表于 2024-2-25 18:19
可以肯定collection是链表构成的,collection读取也非常慢,没有数组快.
我经常用collection,难怪的写的代码 ...

遍历collection需要用for each而不能用下标,否则每个下标都是从头找到i,for each是遍历链表

图片.png

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-21 08:51 , Processed in 0.049575 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表