在Java的LinkedList实现中,我看到两种方法在我看来具有相同的功能。
getFirst()
- 返回此列表中的第一个元素。
peekFirst()
- 检索但不删除此列表的第一个元素,如果此列表为空,则返回null。
它们都获取指向LinkedList中First元素的指针,而不对其进行任何更改。那么,有什么区别?
我看到的唯一区别是peekFirst
如果列表为空则返回null
,如果列表为空则getFirst
会抛出NoSuchElementException
。这种设计模式的用途是什么?
答案 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,具体取决于操作)。