2011-02-06 119 views

回答

5

element()Queue下才有意义只有一个访问的方法,因为你可以排队做的是删除第一个元素继承。然而,一个deque支持这个从这两个结束,需要明确的方法来这样做。

设计一个API可以让你访问第一个元素element()而最后一个元素访问getLast()并不是很好。

可能玩成这样另一件事是,Deque在1.6,在Java Collections Framework的古地区的部分地区已过时的新公约,如明确get~/set~方法访问属性增加。在这种情况下,getFirst()getLast更贴近当前的Java约定。

+0

实际上,get/set约定并不是真正的新约,它实际上比集合框架更旧(例如,将旧的Vector类与新的List接口进行比较)。 – 2011-02-06 20:21:04

+0

老实说,在这种情况下,element()方法应该已经被淘汰。假设很多人不会赞赏,难道它至少已经被弃用了吗?或者至少在Javadocs中有一种关于从哪两种方法中挑选出的方法。 (我相当肯定,这不是Java中重复方法的唯一例子)。 – user183037 2011-02-06 21:16:25

0

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

3

在Java 1.6中,LinkedList实现了Deque(双端队列)。从Deque.element()的javadocs:

获取,但不移除此 双端队列表示的队列的头部 (换言之,此双端队列的第一 元素)。此方法 仅与它不同,因为它 会抛出异常,如果此双端队列为空,则为 。

该方法等效于 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界面还包括重复方法
相关问题