我想使用迭代器将最终值保存在5000000个整数的LinkedList上。对于这项任务,我需要遍历整个列表(我知道这不是最有效的方法(。这是我的代码:
//method 1:
ListIterator ls = list.listIterator();
while (ls.hasNext()) {
var save = ls.next(); //my attempt to save the final value
ls.next();
}
对我来说,保存变量最后一个索引处的值的最佳方式是什么?
对我来说,将最后一个索引处的值保存到变量
请记住,有5.000.000 elements
,访问最后一个元素的最有效方法是利用LinkedList实现Deque接口的事实:
List<Integer> list = new LinkedList<>();
.....
Integer last = ((Deque<Integer>) list).peekLast();
注意:
- 列表中的任何元素都可能是
null
,如果您试图将null
分配给int
变量,则应用程序将崩溃 - 为了首先调用方法
peekLast()
,您必须将列表强制转换为适当的类型
但是,如果您为此任务不惜一切代价have to use a
ListIterator
,那么我建议您修复您提供的代码:
public static Optional<Integer> getLast(List<Integer> list) {
ListIterator<Integer> ls = list.listIterator();
Integer last = null;
while (ls.hasNext()) {
last = ls.next();
}
return Optional.ofNullable(last);
}
ListIterator<Integer> ls = list.listIterator();
int last = -1;
while (ls.hasNext()) {
last = ls.next();
}
或者,在浏览列表时不要保存值:
while (ls.hasNext()) {
ls.next();
}
// Assuming the list isn't empty:
var last = ls.previous();
您可以使用
list.getLast();
以获取列表中的最后一项。