在Java中迭代列表的方法作为Java语言的新手,我试图熟悉所有可能迭代列表(或者可能是其他集合)的方法(或者至少是非病态的方法),以及每种方法的优缺点。给出List<E> list对象,我知道以下遍历所有元素的方法:基本为 环路(当然,有等价物while / do while循环)// Not recommended (see below)!for (int i = 0; i < list.size(); i++) {
E element = list.get(i);
// 1 - can call methods of element
// 2 - can use 'i' to make index-based calls to methods of list
// ...}注意:正如@amarseillan所指出的,这个表单是迭代的一个糟糕的选择。ListS的实际实现,因为get方法的效率可能不如使用Iterator..例如,LinkedList实现必须遍历I之前的所有元素以获得第一个元素.在上面的例子中,List实现来“保存它的位置”,以使将来的迭代更有效率。为了ArrayList这并不重要,因为get是常数时间(O(1),而对于LinkedList它是否与列表的大小成正比(O(N)。有关内建的计算复杂性的更多信息。Collections实现,请查看这个问题.增强型用于循环(解释得很好在这个问题上)for (E element : list) {
// 1 - can call methods of element
// ...}爱尔兰人for (Iterator<E> iter = list.iterator(); iter.hasNext(); ) {
E element = iter.next();
// 1 - can call methods of element
// 2 - can use iter.remove() to remove the current element from the list
// ...}ListIteratorfor (ListIterator<E> iter = list.listIterator(); iter.hasNext(); ) {
E element = iter.next();
// 1 - can call methods of element
// 2 - can use iter.remove() to remove the current element from the list
// 3 - can use iter.add(...) to insert a new element into the list
// between element and iter->next()
// 4 - can use iter.set(...) to replace the current element
// ...}函数Javalist.stream().map(e -> e + 1); // Can apply a transformation function for eIterable.forEach, 为每一个人, ...(Java 8的StreamAPI中的map方法(请参阅@i_am_零的答案)。在Java 8集合类中实现Iterable(例如,所有List(S)现在有一个forEach方法,可以使用该方法来代替循环语句如上所示。(这里是另一个问题这提供了一个很好的比较。)如果有的话,还有什么其他的方法吗?(顺便说一句,我的兴趣根本不是出于对优化性能我只想知道作为一名开发人员,我可以使用哪些表单。)
3 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
for
for (E element : list) { . . .}
for
remove
element
element
for
, while
do while
ListIterator
List#listIterator()
List#iterator()
ListIterator
Iterator
).
长风秋雁
TA贡献1757条经验 获得超7个赞
list.get(i)
添加回答
举报
0/150
提交
取消