在java中,linkedlist的polar()和pop()有什么区别?

2022-09-05 00:00:18

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

    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("");

谢谢!!!


答案 1

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

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


答案 2

它们在功能上是等效的(除了它们如何处理空列表情况),但是你会得到两个变体,因为它是队列和堆栈(即队列Deque)的实现。LinkedList

您可以在源代码中看到它们的实现:

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);
}

因此,如果列表为空,则返回 null,并且 (and ) 引发 .这使得使用的方法稍微好一些,因为您不必处理 null。poll()pop()removeFirst()NoSuchElementExceptionpop()