博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
180607-手写定长数组
阅读量:6692 次
发布时间:2019-06-25

本文共 1265 字,大约阅读时间需要 4 分钟。

文章链接:

手写定长数组

有个背景场景如下:

一天划分为1440分钟,每分钟记录一个数据块,然后用一个数据结构存储着1440个数据块,随着时间的推移,每过一分钟,向这个数据结构中添加一块,并移除最前的那个;其次就是我希望根据当前的时间,可以获取往前n分钟的数据块

简单来说,上面的需求解析如下:

  • 一个数组,容量为1440
  • 频繁的新增和删除
  • 随机的访问

后面两个就限制了ArrayList和LinkedList的使用场景了,所以为了满足这个场景,然后写了一个简单的数据结构

<!--more-->

I. 滑动定长数组

来两个偏移量,将数组看成一个循环的结构,一个Start,一个End,分别记录开始和结束,直接在End处添加数据,每次删start处的数据;定位则计算与End或者Start的偏移量来做,超简单的实现如下:

@SuppressWarnings("unchecked")public static class DArray
{ private Object[] arys; private int size; private int start; private int end; @Getter private int capacity; public DArray(int size) { this.size = size; this.arys = new Object[size]; start = 0; end = start; capacity = 0; } public void add(T obj) { arys[end] = obj; end = (++end) % size; ++capacity; } public T remove() { if (capacity == 0) { return null; } Object obj = arys[start]; arys[start] = null; start = (++start) % size; --capacity; return (T) obj; } public T index(int index) { return (T) arys[(start + index) % size]; }}

II. 其他

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 微博地址:
  • QQ: 一灰灰/3302797840

扫描关注

QrCode

转载地址:http://pwjoo.baihongyu.com/

你可能感兴趣的文章
volley 发送post请求
查看>>
ti processor sdk linux am335x evm /bin/setup-uboot-env.sh hacking
查看>>
php 操作数组 (合并,拆分,追加,查找,删除等)
查看>>
[Hibernate] - EAGER and LAZY
查看>>
python 异常类型
查看>>
CentOS进入图形界面
查看>>
C#--web services之wsdl文件生成cs
查看>>
配置Apache+Tomcat实现SSO(单点登录)
查看>>
《Pro ASP.NET MVC 3 Framework》学习笔记之十五【示例项目SportsStore】
查看>>
Ext右键菜单完整版
查看>>
2012年1月凯立德地图普高清全分辨率懒人包P1750-D5616-2721J09(完美破解,已上路实测,永久下载地址)...
查看>>
SwipeBackActivity 的使用
查看>>
不停止MySQL服务增加从库的两种方式
查看>>
点击div折叠
查看>>
Sqli-LABS通关笔录-2
查看>>
hessian 在spring中的使用 (bean 如 Dao无法注入的问题)
查看>>
ccbpm工作流引擎是怎样支持多种流程模式的
查看>>
Unity打包android的apk与数据包.obb分离和apk签名
查看>>
hive 运行sqlclient异常
查看>>
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile 解决办法
查看>>