LinkedList类中的element()和getFirst()方法有什么区别?

时间:2011-02-06 19:29:51

标签: java linked-list

LinkedListelement()方法和getFirst()方法有类似描述(奇怪的是 - 不一样的单词)。

Deque明确指出两种方法在返回值和异常方面是相同的。

我的问题是 - 为什么有两种相同的方法?它是为了向后兼容吗?一种方法比另一种更有效吗?

3 个答案:

答案 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()似乎是一种在队列中的第一个元素处达到峰值的方法,但不会将其从队列中删除。