Java的LinkedList中getFirst()和peekFirst()有什么区别?

时间:2014-05-29 07:17:02

标签: java linked-list

在Java的LinkedList实现中,我看到两种方法在我看来具有相同的功能。

getFirst() - 返回此列表中的第一个元素。

peekFirst() - 检索但不删除此列表的第一个元素,如果此列表为空,则返回null。

它们都获取指向LinkedList中First元素的指针,而不对其进行任何更改。那么,有什么区别?

我看到的唯一区别是peekFirst如果列表为空则返回null,如果列表为空则getFirst会抛出NoSuchElementException。这种设计模式的用途是什么?

3 个答案:

答案 0 :(得分:9)

Java在版本1.2中引入了LinkedList。这是在提供getFirst方法时。当列表为空时,此消息抛出NoSuchElementException,导致程序员在通话前进行额外检查:

Element e = null;
if (!myList.isEmpty()) {
     e = myList.getFirst();
}

这是一个不便之处,已通过添加peekFirst方法和Dequeue<T>接口的其他方法在Java 1.6版中修复。

答案 1 :(得分:4)

只有一个共鸣: 1)它减少了开发时的异常处理

 public E peekFirst() {
     if (size==0)
        return null;

     return getFirst();
 }

上面是peekFirst()的实现,它只检查大小ZERO,并返回NULL而不是抛出异常

答案 2 :(得分:3)

LinkedList是Deque。 Deque API定义了以两种形式存在的方法:一种在操作失败时抛出异常,另一种返回特殊值(null或false,具体取决于操作)。