对于java中的linkedlist,poll()和pop()之间的区别是什么?

时间:2016-02-22 06:39:23

标签: java linked-list stack pop

我最近发现java API中的链表有两种类似的方法,它们都删除第一个节点并返回它。我编写了以下代码进行测试,他们做了完全相同的事情。他们真的完全一样吗?

    test.add(1);
    test.add(2);
    test.add(3);
    System.out.println(test.pop());
    for(int i = 0; i < test.size();i++ ){
        System.out.print(test.get(i) + " ");
    }
    System.out.println("");
    System.out.println(test.poll());
    for(int i = 0; i < test.size();i++ ){
        System.out.print(test.get(i) + " ");
    }
    System.out.println("");

感谢!!!

2 个答案:

答案 0 :(得分:20)

返回null +删除操作:poll() docs

抛出异常+删除操作:pop() docs

答案 1 :(得分:5)

它们在功能上是等价的(除了它们如何处理空列表的情况),但是你得到两个变体,因为public E poll() { final Node<E> f = first; return (f == null) ? null : unlinkFirst(f); } public E pop() { return removeFirst(); } public E removeFirst() { final Node<E> f = first; if (f == null) throw new NoSuchElementException(); return unlinkFirst(f); } 是队列和栈的实现(即QueueDeque)。

您可以在source code中看到他们的实现:

poll()

如果列表为空,则pop()返回null,removeFirst()(和NoSuchElementException)会引发pop()。这使得{{1}}使用的方法更加精确,因为您不必处理空值。