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中,只有,但没有接口支持
显然,我会说这是一个维护向后兼容性的问题:
1.4具有getFirst()和 只有LinkedList
界面列表
1.5实现,因此需要支持等效的LinkedList
方法elements()
1.6实现了LinkedList
,但由于a)它必须保持向后兼容,b)根据策略,所有方法都应该有接口支持,因此Deque
接口还包括复制方法Deque
size()
:|“LinkedList 1.5实现了队列,因此需要支持等效的elements()方法”——用于检索队列中的第一个元素(element()就是这样做的),仅仅使用getFirst()难道不是很有意义吗-从1.4建立的东西?(我只是想把它弄清楚,我不是想反驳)。@user183037在1.4中,LinkedList有getFirst()
和Queue有element()
,但LinkedList还没有实现Queue。后来,当它这样做时,这两种方法都是向后兼容所必需的(尽管它们的契约是相同的)。我收回这一点,我刚刚意识到队列只是在1.5中引入的。不,我很困惑。我猜他们不希望队列接口中出现element()名称。