java - 如何删除数组中的最后一个元素并将新元素放在前面?
问题描述
我有一个关于 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]
如果您认为有一种更优雅或更有效的方式,我很感谢您可以支持的各种帮助以及发人深省的冲动。
最好的 :-)
解决方案
除非有非常严格的性能限制,否则使用标准 Collection 类将完成工作。看看 java.util.LinkedList。
作为编程练习,您可能会考虑创建一个环形缓冲区。这个想法是避免在每次插入时复制数组。
保留 oldIndex 值。
编写时只需替换 item[oldestIndex] 并增加 oldIndex。
要进行迭代,您从 oldIndex 开始并使用增量方法来处理环绕到数组开头的问题。
int nextIndex(int current) {
return (current + 1) % arrayLength;
}
编写一个很好的封装类来隐藏所有这些将是一个很好的练习。
推荐阅读
- algorithm - 差异字符串匹配
- javascript - 如何将 MultiPolygons 组合在一起以简化 GeoJSON?
- shell - 提取不超过 N 个字符且不以特定字符结尾的前缀
- python - pyexpat.cpython-35m-x86_64-linux-gnu.so:未定义符号:XML_SetHashSalt
- python - 使用python的技术分析库时Column操作出错
- keras - 无法设置优化器的动量
- apollo - 有没有办法允许@apollo/client 3.0 上的可变性
- python - Pyspark:窗口/有条件的累积和
- c# - 在 wpf 中关闭窗口之前强制发送 MQTT 消息?
- sql - 查找每组丢失物品的数量(ORACLE SQL)