如何实现一个对象[],其中top对象总是最新的

本文关键字:对象 top 其中 最新 何实现 实现 一个对象 | 更新日期: 2023-09-27 17:50:24

我正在编写一个应用程序,我想实现一个对象数组,它将定期添加一个新项目。

i总是想知道最后添加的对象是哪个,并考虑将该对象放在位置0。(这样就把每个条目往下推一个索引,最多130个条目)

这是相当容易实现的使用List使用

items.Insert(0,new item());
items.RemoveAt(130);

会自动将每一项往下推,并在130处移除这一项但是对于数组

来说就不那么简单了

我最初的想法是在

for(int i = 129; i>0;i--)
{
 items[i] = items[i-1]; 
}
items[0] = new item();

这允许我简单地访问最新的项(通过index[0]),以及前面的每个项按创建顺序(1 -> 129);

现在它本身是相当简单的,我想知道是否有其他的方法来执行这个

编辑:谢谢你的快速回复,

我已经对此执行了一些测试(使用100万次迭代)看起来queue方法在这里是最快的,但只是稍微快一点然后是列表然后是数组,处理100万个条目要多花50%的时间

我想我会探索queue Stack选项

再次感谢;

如何实现一个对象[],其中top对象总是最新的

我总是想知道最后添加的对象是哪个和是哪个考虑把那个物体放在位置0。(从而推动每个项目减少一个索引到最多130项)

…这本身就很简单,我想知道是否有还有其他方法吗?

是的,有一种更简单的方法可以通过使用一个已经构建的结构来实现,这个结构就是Queue (First Input First Output)。您主要需要三个方法,它们是:

  • Enqueue()添加一个对象到队列的末尾

  • Dequeue()返回队列开头的对象将其删除

  • Peek()返回队列开头的对象,不删除

你的循环是不必要的,Array。Insert会为你"下移"元素。

但是如果你真的想总是在开始添加新元素,从性能的角度考虑,LinkedList会更好,因为无论你在哪里插入元素,它都不需要移动元素。

我想这就是你能做的最简单的了。我个人认为它是一个通用的扩展方法。

public static void Insert<T>(this T[] array, int position, T item)
{
    for ( int i = array.Length-1; i > position; i-- )
        array[i] = array[i-1];
    array[position] = item;
}

你可以用

string[] lolCats = { "ceiling cat", "invisible bike cat", "lime cat" };
lolCats.Insert(0, "monorailcat");