Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';LinkedList类中的element()和getFirst()方法之间的区别是什么?_Java_Linked List - Fatal编程技术网

Java 什么';LinkedList类中的element()和getFirst()方法之间的区别是什么?

Java 什么';LinkedList类中的element()和getFirst()方法之间的区别是什么?,java,linked-list,Java,Linked List,对element()方法和getFirst()方法有类似的描述(奇怪的是,两个词不一样) 明确说明这两个方法在返回值和异常方面是相同的 我的问题是-为什么有两个相同的方法?是为了向后兼容吗?一种方法比另一种更有效吗?在列出的链接中,它们看起来是一样的。但在队列中,element()似乎是一种在队列中的第一个元素处达到峰值的方法,但不能将其从队列中删除。element()继承自Queue,在该队列中,只有一种访问方法是有意义的,因为您在队列中所能做的就是删除第一个元素。然而,deque从两端都支持

element()
方法和
getFirst()
方法有类似的描述(奇怪的是,两个词不一样)

明确说明这两个方法在返回值和异常方面是相同的


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

在列出的链接中,它们看起来是一样的。但在队列中,
element()
似乎是一种在队列中的第一个元素处达到峰值的方法,但不能将其从队列中删除。

element()
继承自
Queue
,在该队列中,只有一种访问方法是有意义的,因为您在队列中所能做的就是删除第一个元素。然而,deque从两端都支持这一点,因此需要显式方法来实现

如果要设计一个API,让您使用
element()
访问第一个元素,使用
getLast()
访问最后一个元素,那就不太好了

另一个可能与此相关的因素是,
Deque
是在1.6中添加的,其中Java集合框架的古老部分已经被新的约定淘汰,例如用于属性访问的显式
get~
/
set~
方法。在这种情况下,
getFirst()
getLast
更符合当前的Java约定。

在Java 1.6中实现了(双端队列)。从javadocs:

检索但不删除 由此 德克(换句话说,第一 本文件中的元素)。这种方法 与peek的不同之处在于 如果此deque为,则引发异常 空的

此方法相当于
getFirst()

在Java1.5中,有两种方法,但没有接口支持。我的猜测是,在Java1.6中,他们故意实现了
Deque
,以包含此方法

在Java1.4中,只有,但没有接口支持

显然,我会说这是一个维护向后兼容性的问题:

  • LinkedList
    1.4具有getFirst()和 只有
    列表
    界面
  • LinkedList
    1.5实现,因此需要支持等效的
    elements()
    方法
  • LinkedList
    1.6实现了
    Deque
    ,但由于a)它必须保持向后兼容,b)根据策略,所有方法都应该有接口支持,因此
    Deque
    接口还包括复制方法

实际上,get/set约定并不是什么新的约定,它实际上比集合框架更旧(例如,将旧的Vector类与新的List接口进行比较)。我真诚地认为,在这种情况下,element()方法应该被淘汰。假设这不会得到很多人的赞赏,那么它至少会被弃用吗?或者至少,Javadocs中提供了某种指导,可以从这两种方法中选择哪种方法。(我相当肯定,这不是Java中重复方法的唯一例子)。@Paŭlo:我想他们真的不再关心了,尤其是对于集合。虽然它们像99%的Swing一样不推荐使用,并且使其更加麻烦,但集合保留了一些方法,如
size()
:|“LinkedList 1.5实现了队列,因此需要支持等效的elements()方法”——用于检索队列中的第一个元素(element()就是这样做的),仅仅使用getFirst()难道不是很有意义吗-从1.4建立的东西?(我只是想把它弄清楚,我不是想反驳)。@user183037在1.4中,LinkedList有
getFirst()
和Queue有
element()
,但LinkedList还没有实现Queue。后来,当它这样做时,这两种方法都是向后兼容所必需的(尽管它们的契约是相同的)。我收回这一点,我刚刚意识到队列只是在1.5中引入的。不,我很困惑。我猜他们不希望队列接口中出现element()名称。