我对为什么 arraylist 比链表更快的理解是,使用 arraylist 基本上只需要一个操作 - 更新末尾数组元素的引用,而使用链表你必须做更多的事情,例如创建一个新节点,更新 2 个引用,遍历链表并更新最后一个节点以指向新节点等。
但是我不确定java如何实现这些。 arraylist 如何知道“最后一个”元素在哪里,它是否存储最后一个元素的值,或者它是否遍历数组并在最后一个元素之后添加一个新元素?
而链表,它们是存储对列表中最后一个节点的引用,还是遍历整个列表以到达末尾?
看源码:
数组列表 http://docjar.com/html/api/java/util/ArrayList.java.html:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
链表 http://docjar.com/html/api/java/util/LinkedList.java.html:
public boolean add(E e) {
linkLast(e);
return true;
}
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++;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)