在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()
方法会抛出异常。