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



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

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

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

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

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

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

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

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

原因只有一个:1)在开发

时减少了异常处理
 public E peekFirst() {
     if (size==0)
        return null;
     return getFirst();
 }

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

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

如果你的LinkedList有数据,那么没有区别,但是如果你的LinkedList是空的,那么peekFirst()方法返回null。它不会抛出任何错误或异常,但如果列表为空,getFirst()方法会抛出异常。

最新更新