java问题:怎么保存最近的N个数,新数添加的同时删除最旧的数,一直保留N个最近的数,数组可以实现吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java问题:怎么保存最近的N个数,新数添加的同时删除最旧的数,一直保留N个最近的数,数组可以实现吗?相关的知识,希望对你有一定的参考价值。

就想坐电梯一样,一直有人上,一直有人下,电梯上的人数一直是N个
不一定是数组,简便一点的就行

其实没有想的那么麻烦,用数组完全可以做到,下面时我实现的代码:
public class Save

private final int n = 5;// 确定数组大小,即要保存几个数
private int[] a = new int[n];// 创建数组
private int x = 0;// 指定可替换位置
// 方法:添加
public void add(int y)
if (x == n) x = 0;
a[x] = y;
x++;

// 方法:显示数组
public void display()
for(int i=x;i>0;i--)
System.out.print(a[i-1] + " ");

for(int j=n;j>x;j--)
System.out.print(a[j-1] + " ");

System.out.println();



可以使用下面的类进行测试:
public class Test

public static void main(String[] args)
Save s = new Save();
s.add(1);
s.add(2);
s.add(3);
s.add(4);
s.add(5);
s.add(6);
s.add(7);
s.display();




输出结果为:7 6 5 4 3
参考技术A import java.util.ArrayList;
import java.util.List;

/**
*不清楚为什么显示不能全面,你知道留下言,我可以给你一下代码
* 这个使用方式你可以控制 如果你不想要打印是否添加或者移除成功你就可把所有的System输
*出语句注销掉
* 你使用这个类的时候可以确保 你的元素添加或者移除到底成功没有 如果你想要添加更多只需要把isOutIndex()
* 方法里面的10改成更大,这样当你添加的时候 你就可以能看到是否添加进去
*/
public class Test
private List<Integer> list = new ArrayList<Integer>();

// 添加元素
// 在你添加元素的时候首先判断是否满了,如果满了就删除掉第一个
// 然后添加到最后一位
public void addNum(int num)
if (isOutIndex())
if (list.add(num))
System.out.println(本回答被提问者和网友采纳
参考技术B 这就像是必定含N个元素的队列,可以用循环数组做,定义一个含N个变量的数组,设置一个变量p,指向下一次插入的位置,每次插入后,p=(p+1)%N
当p超过数组的最后一个位置时,又回到第一个位置。

以上是关于java问题:怎么保存最近的N个数,新数添加的同时删除最旧的数,一直保留N个最近的数,数组可以实现吗?的主要内容,如果未能解决你的问题,请参考以下文章

9.25 随时找到数据流的中位数

我如何将新数据传递给保存的多项式分类器?

怎么从m个数中随机选择n个数

插入新数再排序

java中一个数的n次方应该怎么写?

洛谷训练题(21.12.5)