【问题标题】:C# - Java's DequeC# - Java 的双端队列
【发布时间】:2010-12-28 15:16:51
【问题描述】:

在 Java 中,有一个名为 Deque 的类,我想在 .NET (C#) 中找到类似的东西。

我需要这个的原因是因为我需要查看集合中的最后一项,然后将集合中的第一项出列。

谢谢, AJ 拉文迪兰。

【问题讨论】:

    标签: c# deque


    【解决方案1】:

    PowerCollections 有一个 Deque 类(以及经过验证的谱系)。

    【讨论】:

    • LinkedList 之上提供了什么?
    【解决方案2】:

    查看 .NET 的 System.Collections.Generic.LinkedList 集合。

    【讨论】:

      【解决方案3】:

      List 应该为你做到这一点:

      var l = new List<int>();
      var last = l[l.Count - 1];
      l.RemoveAt(0);
      

      【讨论】:

      • 作为临时解决方法。问题:RemoveAt(0) 需要 O(n) 时间。
      【解决方案4】:

      这是我对Deque&lt;T&gt;(使用环形缓冲区)和并发无锁ConcurrentDeque&lt;T&gt; 的实现:

      这两个类都支持在双端队列的两端进行 Push、Pop 和 Peek 操作,所有操作都在 O(1) 时间内完成。

      【讨论】:

        【解决方案5】:

        in another SO question 上也有类似的东西。

        流行的答案似乎是用链表解决,Eric Lippert 提出了他自己的Deque implementation

        所以我想简短的回答是否定的,.NET 中没有内置如此严格的数据结构

        HTH。

        【讨论】:

        • 需要注意的是,Eric 的 Deque 实现是一个不可变集合。如果不变性对您来说不重要,那么可能会有更有效的可变双端队列实现。
        猜你喜欢
        • 2016-08-18
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-28
        • 2015-09-01
        • 2014-10-12
        • 2013-05-21
        相关资源
        最近更新 更多