首页 > 解决方案 > 如何删除数组中的最后一个元素并将新元素放在前面?

问题描述

我有一个关于 Java 的问题。我刚开始接触 Java,我的谷歌搜索带来了很多结果,但最终的帮助不是。我创建了一个类来跟踪历史信息。我在不同的日子有不同的价值观,需要定期更新它们。我想跟踪过去 30 天并创建了一个包含 30 个元素的数组。当我调用我的“移位”函数时,我想删除最后的 n 个元素并将零放在前面。这是一个 5 天的小例子:

public class Testclass {

    private int[] histInfo;

    public Element()
    {
        this.histInfo = new int[5];
    }

    public void shift_histInfo(long m)
    {
        //do magic 
    }
}

我想要转变做的是

INPUT:
histInfo = [50,21,1,45,901]

OPERATION:
shift_histInfo(2);

RESULT:
histInfo = [0,0,50,21,1]

如果您认为有一种更优雅或更有效的方式,我很感谢您可以支持的各种帮助以及发人深省的冲动。

最好的 :-)

标签: javaarraysshift

解决方案


除非有非常严格的性能限制,否则使用标准 Collection 类将完成工作。看看 java.util.LinkedList。

作为编程练习,您可能会考虑创建一个环形缓冲区。这个想法是避免在每次插入时复制数组。

保留 oldIndex 值。

编写时只需替换 item[oldestIndex] 并增加 oldIndex。

要进行迭代,您从 oldIndex 开始并使用增量方法来处理环绕到数组开头的问题。

int nextIndex(int current) {
   return (current + 1) % arrayLength;
}

编写一个很好的封装类来隐藏所有这些将是一个很好的练习。


推荐阅读