美文网首页码农日历
180607-手写定长数组

180607-手写定长数组

作者: 一灰灰blog | 来源:发表于2018-06-07 19:55 被阅读0次

文章链接:https://liuyueyi.github.io/hexblog/2018/06/07/180607-手写定长数组/

手写定长数组

有个背景场景如下:

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

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

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

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

I. 滑动定长数组

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

 @SuppressWarnings("unchecked")
public static class DArray<T> {
    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. 其他

一灰灰Bloghttps://liuyueyi.github.io/hexblog

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

声明

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

扫描关注

blogInfoV2.png

相关文章

  • 180607-手写定长数组

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/07/180607...

  • number数组排序

    这里记录两个手写方法的思路:1.找到不定长数组中的最小值;2.给不定长数组排序 number数组最小值 numbe...

  • Scala基础——数组

    定长数组 数组一般包括定长数组和变长数组,在Scala中使用Array进行声明定长数组注意:scalad的索引标示...

  • oracle 数组学习

    oracle数组可以分为定长数组和可变数组。 一、定长数组:create or replace procedur...

  • scala数组

    scala中的数组分为定长数组(Array)和可变长数组(ArrayBuffer) 定长数组(Array):1.声...

  • solidity定长数组和动态数组

    固定长度的数组 固定长度数组声明 直接在定义数组的时候声明固定长度数组的值: 可通过数组的length属性来获得数...

  • 《快学Scala》——数组、映射和元组

    数组 定长数组:在Scala中可以用Array,初始化一个定长数组。例如: 变长数组(数组缓冲):Scala中使用...

  • 将数组拆分成固定长度数组

    #pragma mark -- 将数组拆分成固定长度 /** *将数组拆分成固定长度的子数组 * *@parama...

  • 无标题文章

    #pragma mark -- 将数组拆分成固定长度 /** *将数组拆分成固定长度的子数组 * *@parama...

  • Scala-数组、映射

    1、数组1)、创建数组创建定长数组和长度可变数组//创建定长数组,使用new关键字,指定数组泛型为Int,长度为5...

网友评论

    本文标题:180607-手写定长数组

    本文链接:https://www.haomeiwen.com/subject/jqdnsftx.html