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

13 java linked-list

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

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

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

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

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

das*_*ght 10

Java LinkedList1.2中引入了Java .这是getFirst提供方法的时候.NoSuchElementException当列表为空时,此消息抛出,导致程序员在调用之前进行额外检查:

Element e = null;
if (!myList.isEmpty()) {
     e = myList.getFirst();
}
Run Code Online (Sandbox Code Playgroud)

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


Nit*_*tul 6

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

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

     return getFirst();
 }
Run Code Online (Sandbox Code Playgroud)

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