- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这里是 an answer to "How do I instantiate a Queue object in java?" ,
Queue
is an interface. You can't instantiate an interface directly except via an anonymous inner class. Typically this isn't what you want to do for a collection. Instead, choose an existing implementation. For example:Queue q = new LinkedList();
or
Queue q = new ArrayDeque();
Typically you pick a collection implementation by the performance and concurrency characteristics you're interested in.
这是如何运作的? Queue这个接口(interface)来承担LinkedList的实现意味着什么?
这是否意味着对象可以按照 FIFO(先进先出顺序)出列,并且可以在 q
上调用链表方法?
最佳答案
用一个(可能有些有缺陷的)比喻来解释——想想一个 LinkedList
作为一张纸。考虑对 Queue
的分配覆盖了这张纸的一小部分,这表明它是Queue
.
如果您调用 Queue
方法,它仍然会做类似 LinkedList
的事情通常会,因为那是一张纸。
鉴于大部分内容都被覆盖了,您看不到它是 LinkedList
, 你只能看到它是一个 Queue
, 所以你只能调用 Queue
方法。
整张纸仍然存在 - 你可以简单地移除覆盖物,这相当于将它投回 LinkedList
,这将允许您调用任何 LinkedList
再次使用它的方法。
现在了解更多技术细节:
顺便说一句LinkedList
“通常会”做我上面提到的事情,我的意思是 LinkedList
始终是一个链表,即使您将它分配给 Queue
- 它不会突然开始使用数组作为底层实现,作为 ArrayDeque
would(它也实现了 Queue
),或者其他东西。
Queue
实际上不需要是 FIFO(见 the docs )(如果需要, LinkedList
也需要),所以 LinkedList
在这方面会有相当大的自由度,所以让我们使用 Deque
继续这个解释。 - 它有支持从前面或后面添加和删除的方法。
因为 LinkedList
工具 Deque
, 它需要实现 addFirst
功能。根据文档,addFirst
函数需要添加到Deque
的前面, 事实上,有 LinkedList
, 它会添加到 LinkedList
的前面(虽然 LinkedList
的前面不需要是 Deque
的前面,通过查看 Deque
中实现的 LinkedList
方法,我们看到 Deque
的前面是前面LinkedList
的所有方法,以及从一侧添加/删除的所有方法,从正确的一侧进行)。
现在有一个重要但有点令人困惑的注释 - LinkedList
例如,可以实现 Deque
并且有一个 addFirst
它没有做它应该做的事——例如,它只能打印一些随机文本。语言本身没有任何东西可以阻止这种情况 - 因为就编译器而言,实现 Deque
只需要你定义一堆方法 - 没有强制执行这些方法应该做什么。就 Java API 和任何体面的库而言,可以安全地假设每个实现接口(interface)的类都将符合该接口(interface)声明的内容,但请记住,没有什么可以阻止它不符合当涉及到更多可疑的库或经验不足的程序员时。
关于java - 队列<整数> q = new LinkedList<整数>(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21727873/
我想添加 LinkedList (我们称之为列表 A)到 LinkedList> (称之为列表 B)。执行此操作后,我需要更改列表 A 的值并将其再次添加到列表 B,但不更改已存储在列表 B 中的值。
更新:感谢所有的回答。我发现的最干净的解决方案是这个: if ( k(Arrays.asList(new LinkedList<>())); 我有一个递归方法,可以从列表中生成所有“n 选 k”组合。
在我的 Java 应用程序中,以下两个都将编译和运行,并产生所需的结果。 //"Rotate" the list items one place to the left. myLinkedList.a
我写了一个LinkedList接受 Nodes 的类存储 Integers . 然后我创建了一个 LinkedList stack = new LinkedList() ,并添加了 Node s 如果
这个问题在这里已经有了答案: What does it mean to "program to an interface"? (33 个答案) 关闭 9 年前。 新手 Java 问题: 谁能解释一下
我有一个问题。我无法并排输出我的 LinkedList。我问了这个问题,但遗憾的是我的老师告诉我不要更改方法头或使用 java 库(如日历)。我得到了很多关于使用它或更改方法头的建议。我是根据年级而定
这里有什么问题?。我正在尝试使用邻接列表,通过利用 util 包中的集合来实现图形数据结构。这里 LinkedList array which holds some integer. Each ele
这个问题已经有答案了: Reversing a linked list in Java, recursively (33 个回答) 已关闭10 年前。 如何使用 linkedList 类中的方法以相反
我需要实现一个 LinkedList,到目前为止,我已经编写了在列表中按顺序插入值的方法。我有我的节点 front 作为我的类的实例数据,当创建我的第一个值并尝试将 front 的 next 值设置为
目前,我的 LinkedList(不是 Java 的)类中有一个方法,可以将单个节点添加到 LinkedList 中,如下所示: public void add(int index, T v) {
我正在编写一个读取 XML 文件的类,该 XML 使用“sax”类进行解析。在我的 XML 文件中,我创建了“for”标签和“宏”,使 for 循环能够写入 XML,例如: Th
我正在处理一个 C++ 作业,我将在一个链表的链表上创建一个搜索引擎。根据要求,我不能使用其他库和 STL。 基本上它会是这样的(我从小列表中删除了变量,因为它们是不相关的): 我的结构是这些: st
老实说,我现在真的很困惑这个问题,并且真的不知道如何解决这个问题。我需要编写一个方法,其中给定一个字符链接列表(例如:{'a','A','d','X'})并返回仅包含大写字符的列表(返回:{'A','
我正在尝试获取可执行文件中的两个链表,并在交替位置将它们合并到一起。前任。 ListOne 1,2,3 和 ListTwo 4,5 新的 ListOne 应该是 1,4,2,5,3。 链表.h文件:
这个问题在这里已经有了答案: Is List a subclass of List? Why are Java generics not implicitly polymorphic? (19 个回答
在尝试了解如何将哈希表插入LinkedLists时,我遇到了麻烦。我失去了尝试过的不同事物的数量。我知道我可以使用ArrayList或其他东西,但是我想使它与LinkedLists一起工作,以便可以对
我一直在尝试编写一种方法,不仅可以从 LinkedList(allUsers) 中删除对象(User),还可以从所有用户拥有的单个 LinkedList 中删除。谁能向我解释为什么这是错误的?我已经包
我有一个列表结构和一个名为树的递归函数。在下面的代码中,它永远不会到达 current == null 语句,因此它将永远运行。 如果我无法使用null,解决方案是什么? private void t
这个问题在这里已经有了答案: How does one add a LinkedList to a LinkedList in C#? (3 个答案) 关闭 9 年前。 假设我有以下内容: Link
我正在尝试为 LinkedList 创建一个反向 ListIterator,并且打算将其实现为 linkedList.listIterator(linkedList. size()) 交换了 next
我是一名优秀的程序员,十分优秀!