根据定义addLast(),addLast()方法用于将元素添加到列表的最后一个。但在下面的代码中,这种情况没有发生。
LinkedList<Integer> demo = new LinkedList<>();
demo.addLast(15);
demo.addFirst(1);
demo.add(10);
System.out.println(demo);
输出是
[1, 15, 10]
但根据定义,输出应该是
[1, 10, 15]
因为 addLast() 方法应该将 15 添加到列表的最后一个。我不确定这里到底是什么问题。
代码片段:代码片段
addLast
在列表末尾添加一个项目 - 这并不意味着添加其他项目时它将保留在列表末尾。
让我们追踪代码:
addLast(15)
会在此列表的末尾添加 15,所以现在是 [15]addFirst(1)
会在列表的开头添加 1,所以现在是 [1, 15]add(10)
会在列表末尾添加 10,所以现在是 [1, 15, 10]addLast()
确实将 15 添加到列表末尾,并将其从 []
转移到 [15]
。稍后您使用 add()
,它将另一个元素附加到列表末尾(在 15
之后)。
来自add()的文档:
public boolean add(E e) 将指定元素追加到末尾 这份清单。该方法相当于addLast(E)。
以及显而易见,因为这可以是
add()
添加到列表的最后并返回一个布尔值,指示添加是否成功。
但另一方面,
addLast()
方法添加了最后一个但其 void 方法,因此它不会返回布尔值。
将指定元素追加到此列表的末尾。
该方法相当于add(E)。
来自 add() 的 javaDoc
将指定元素追加到此列表的末尾。
该方法等价于addLast(E)。
但出于多种原因,人们可能更喜欢使用
add()
:
add(int index, E element)
:
这会将某个元素添加到某个索引。以及来自 add(int index, E element)
的javaDoc
在此列表中的指定位置插入指定元素。
将当前位于该位置的元素(如果有)和任何后续元素向右移动(为其索引加一)。
这个方法会抛出一个
如果索引超出范围(索引 < 0 || index > size())IndexOutOfBoundsException
也就是说,您所做的一切如下:
demo.addLast(15);//your list now looks like this 15-> null
其中
15
在本例中是头部和尾部。
demo.addFirst(1);/your list now looks like this 1->15->null
现在您将
1
作为头/前导元素,将 15
作为尾/尾随元素。
最后为了
demo.add(10);//your list now looks like this 1->15->10->null.
欲了解更多信息,请参阅
addFirst
和 addLast
在后台如何工作:
addFirst
将致电 linkFirst
private void linkFirst(E e) {
final Node<E> f = first;
final Node<E> newNode = new Node<>(null, e, f);
first = newNode;
if (f == null)
last = newNode;
else
f.prev = newNode;
size++;
modCount++;
}
addLast()
将致电 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++;
}
我强烈建议您进行实施,以便您可以更好地理解整个概念。 快乐学习。
解释如下:
当你这样做
demo.addLast(15)
时,考虑到你的列表是空的,所以你只有 [15]
之后你做了 demo.addFirst(1)
,根据它将在开始时插入的定义,所以你最后有 [1, 15]你做了 demo.add(10),它在最后插入,所以你有 [1, 15, 10]
,当你打印时它将是 [1, 15, 10]
。
addLast 在列表末尾添加一个项目 - 这并不意味着添加其他项目时它将保留在列表末尾。
您从一个空列表开始。
addLast(15)
会在此列表的末尾添加 15,所以现在是 [15]
addFirst(1)
会在列表的开头添加 1,所以现在是 [1, 15]
add(10)
会在列表末尾添加 10,所以现在是 [1, 15, 10]