区别:
ArrayDeque:内部以数组的形式保存集合中的元素,因此随机访问元素时有较好的性能,插入删除时性能较差。
LinkedList:内部以双向链表的形式来保存集合中的元素,因此随机访问集合中的元素时虽然性能较差,但在插入、删除元素时性能较好。
我比较喜欢使用ArrayDeque或者LinkedList来模拟实现栈或者队列,但最近遇到了一个问题,在一段程序中,我使用LinkedList模拟时是正常的,使用ArrayDeque模拟会报空指针异常。
那段程序我模拟了队列,调用了其中的方法offer,究竟是什么原因呢,我们可以看一下各自的源码:
ArrayDeque:它的offer方法底层调用addLast方法
public void addLast(E e) {
if (e == null)
throw new NullPointerException();
final Object[] es = elements;
es[tail] = e;
if (head == (tail = inc(tail, es.length)))
grow(1);
}
LinkedList:它的offer方法底层调用linkLast方法
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
看了二者的源码之后,可以知道,ArrayDeque它是不允许储存null的,当我们想保存一个null时,它会抛出一个空指针异常错误,而LinkedList则不会检查是否为空。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)