LinkedList
对element()
方法和getFirst()
方法有类似描述(奇怪的是 - 不一样的单词)。
Deque
明确指出两种方法在返回值和异常方面是相同的。
我的问题是 - 为什么有两种相同的方法?它是为了向后兼容吗?一种方法比另一种更有效吗?
答案 0 :(得分:5)
element()
继承自Queue
,只有一个访问方法才有意义,因为您在队列中可以执行的操作是删除第一个元素。但是,deque支持两个结束,这需要使用显式方法。
设计一个API并不是很好,您可以使用element()
访问第一个元素,使用getLast()
访问最后一个元素。
可能会发生的另一件事是在{1.6}中添加了Deque
,其中Java Collections Framework的部分古老部分已被较新的约定废弃,例如显式get~
/ { {1}}属性访问的方法。在这种情况下,set~
和getFirst()
更紧密地遵循当前的Java约定。
答案 1 :(得分:3)
在Java 1.6中,LinkedList
实现了Deque
(双端队列)。来自Deque.element()
javadocs:
检索,但不删除 以此为代表的队列的头部 deque(换句话说,第一个 这个双端队列的元素)。这种方法 与窥视不同之处仅在于它 如果这个双端队列是抛出异常 空。
此方法相当于
getFirst()
强>
在Java 1.5中,LinkedList
有两种方法,但getFirst()
没有接口支持。我的猜测是,在Java 1.6中,他们故意实现Deque
包含此方法。
在Java 1.4中,LinkedList
只有getFirst()
,但它没有接口支持。
显然,我认为这是保持向后兼容性的问题:
LinkedList
1.4有getFirst()和
只有List
界面LinkedList
1.5实现Queue
,因此需要支持等效的elements()
方法LinkedList
1.6实现Deque
但是因为a)它必须保持向后兼容,b)通过策略,所有方法都应该由接口支持,Deque
接口也包含副本方法答案 2 :(得分:0)
在列出的链接中,它们看起来是相同的。但是在队列中,element()
似乎是一种在队列中的第一个元素处达到峰值的方法,但不会将其从队列中删除。