- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
C# 的 LinkedList 的 RemoveFirst() 和 RemoveLast() 操作不返回删除的值是否有一些惯用的、性能的或设计哲学的原因?
现在,如果我想读取并删除第一个值,我相信咒语是:
LinkedList<string> list = ...;
...
string removed = list.First.Value;
list.RemoveFirst();
在 Java 中,它将是:
LinkedList<String> list = ...;
...
String removed = list.removeFirst();
不要误会我的意思;我并不是说 Java 更好。 C# 的 LinkedList 具有更多功能,只需将 Node 公开为公共(public)结构即可。我正在尝试了解设计选择。
最佳答案
我真的无法给出明确的答案,因为我无法读懂 LinkedList<T>
设计师的想法。 .我能说的是这个。
在 Java 中,LinkedList<E>
类实现了 Queue<E>
接口(interface),它反射(reflect)了设计者的一个决定:“你知道吗?链表可以很容易地用作队列,所以我们不妨让它实现该接口(interface)。”您与 queue 交互的方式是从末尾弹出项目,然后,您知道,使用它们做某事(这意味着 Pop
很自然) - 返回弹出元素的类似操作)。
在 .NET 中,没有 IQueue<T>
界面。基本上,设计者做出了一个不同的决定:“我们所知道的最有效的类似队列行为的实现是一个简单的基于数组的循环队列。因此,如果开发人员想要一个队列,他们应该使用 Queue<T>
类,这正是那个。”
如果开发人员想要使用 LinkedList<T>
作为一个queue(或deque),他/她很可能为他/她实际需要的数据结构选择了错误的实现(来自.NET观点)。
因此,本着“一个合适的函数应该只做一件事”的精神,BCL 的人们选择制作 LinkedList<T>.RemoveFirst
这样做:删除第一个元素(类似于 List<T>.RemoveAt
只是删除指定索引处的元素并且不返回任何内容)。
我并不是说决定是对是错。我认为 Java 和 .NET 中标准链表类的不同接口(interface)只是反射(reflect)了链表是什么以及如何在这两个框架中使用的不同观点.
关于c# - 为什么 C# LinkedList.RemoveFirst() 不返回删除的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982597/
我正在寻找 Linq RemoveFirst(Predicate match)但只能找到RemoveAll . 我知道我可以编写自己的扩展方法,但想知道是否已经存在具有不同名称的等效函数,或者是否存在
我创建了一个应该删除数组的第一个元素的方法,但是当我运行我的代码时,调试器出现故障,我不确定为什么。 这是我的 removeFirst() 方法: Loan & ListOfLoans :: rem
我的 g++ 似乎不喜欢这个函数,我也不知道为什么。 我写它可能有错误,但我看不到编译器指示的错误。 我把相关部分粘贴在这里。 // STRUCT struct node { int data;
对于我的用例,我发现随着数组大小的增长,移位/切片方法对我的 CPU 造成了太多压力。理论上,该数组可能有 86400 个项目那么大,尽管通常它会小得多——大约 10000 个数组元素。 我试图用一个
我正在尝试使用列表执行removeFirst(),删除列表的第一个节点并返回删除的值。 这是我得到的: public E removeFirst() { E value=fir
我正在准备考试,并且对 Big Oh 表示法的时间复杂度有所了解。我得到了这个作为他们会问什么的例子,我很好奇你的想法是什么。我不确定这些是否是线性 O(n) 还是什么。如果你能帮助我,其中一些复杂性
我无法理解这个。 当我们调用 LinkedList.add() 时,我们将一个元素添加到列表的末尾,所以如果我们想用链表模拟堆栈,我们应该调用 LinkedList.removeLast( ) 为流行
C# 的 LinkedList 的 RemoveFirst() 和 RemoveLast() 操作不返回删除的值是否有一些惯用的、性能的或设计哲学的原因? 现在,如果我想读取并删除第一个值,我相信咒语
我正在尝试从 LinkedList 返回并删除第一个元素。下面是我可以看到的两个选项。 第一种方法: LinkedList servers = new LinkedList(); .... Strin
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 7 年前。 Improve
struct Queue{ private var elements : [T] = [] public mutating func enqueue(_ element: T){
我刚刚从 MediaPlayer 切换到 Exoplayer,以便在游戏应用程序中播放背景音乐。在我的所有测试中,它似乎工作正常,但在部分发布后,我开始看到崩溃 crashalytics: NoSuc
在我的 Java 应用程序中,以下两个都将编译和运行,并产生所需的结果。 //"Rotate" the list items one place to the left. myLinkedList.a
运行 linux Mint 64 位,使用 Install4j 将 VTK JOGL JAVA 程序包装到 Linux 发行版,我在启动时遇到此崩溃: java.util.NoSuchElementE
ArrayDeque docs声明push(E)与 addFirst(E) 相同,和pop()与 removeFirst() 相同. 我认为使用 addLast(E) 可以达到相同的效果+ remov
我是一名优秀的程序员,十分优秀!