相关疑难解决方法(0)

队列<T>与列表<T>

我目前正在使用一个List<T>队列(lst[0]然后使用lst.removeAt(0))来保存对象.在给定时间最多约20项.我意识到有一个真正的Queue<T>课程.我不知道是否有任何好处(性能,内存等),使用Queue<T>List<T>表现得像一个队列?

.net queue performance list difference

45
推荐指数
3
解决办法
4万
查看次数

为什么Stack <T>和Queue <T>用数组实现?

我正在Albahari兄弟的Nutshell中阅读C#4.0,我发现了这个:

堆栈在内部实现,其数组根据需要调整大小,与Queue和List一样.(第288页,第4段)

我不禁想知道为什么.LinkedList提供O(1)头尾插入和删除(这应该适用于堆栈或队列).可调整大小的数组有O(1)缓冲插入(如果我没记错的话),但O(n)最坏的情况(我不确定删除).它可能比链表使用更多的空间(对于大型堆栈/队列).

还有更多吗?双链表实现的缺点是什么?

.net c# queue stack linked-list

27
推荐指数
3
解决办法
4993
查看次数

有没有更好的方法为队列实现Remove方法?

首先,只是授予我实际上想要的功能Queue<T>- FIFO,通常只需要Enqueue/ Dequeue等等 - 所以我更喜欢"你真正想要的是什么"之外的答案List<T>(我知道)关于RemoveAt).

例如,假设我有一个Queue<DataPoint> dataToProcess数据点需要按照它们到达的顺序进行处理.然后定期有一些像这样的代码是有意义的:

while (dataToProcess.Count > 0) {
    DataPoint pointToProcess = dataToProcess.Dequeue();
    ProcessDataPoint(pointToProcess);
}
Run Code Online (Sandbox Code Playgroud)

但是,无论出于何种原因,我们都会发现,应该处理已添加到队列中的特定数据点.那么如果有一种类似于以下的方法,那将是理想的:

dataToProcess.Remove(badPoint);
Run Code Online (Sandbox Code Playgroud)

我明白,实际上没有可行的方法来获得一种Remove不涉及某种形式的枚举的方法; 但是,因为a Queue<T>并不是真的让你随便走进并随机删除一些项目,我能想出的唯一解决方案是:

bool Remove(T item) {
    bool itemFound = false;

    // set up a temporary queue to take items out
    // one by one
    Queue<T> receivingQueue = new Queue<T>();

    // move all non-matching items out into the
    // temporary queue
    while (this.Count > …
Run Code Online (Sandbox Code Playgroud)

.net c# queue

17
推荐指数
2
解决办法
1万
查看次数

标签 统计

.net ×3

queue ×3

c# ×2

difference ×1

linked-list ×1

list ×1

performance ×1

stack ×1