Gee*_*ddy 9 java loops arraylist
当我在Java中编写和发现新的处理方式时,我总是对通过列表循环输出数据的更好方法感到困惑.
在下面的例子中,我循环遍历列表并使用计数器,因此很多次我必须在输出中包含一个索引计数器.
我偏爱方法1,但我发现这些方法中的任何一个都有点过时了.我已经看到很多循环列表的例子,而且主要使用方法2.
所以我的问题是什么是更好的方法,如果所有这些方法都一样,那么最标准的是什么?
private ArrayList<String> list = new ArrayList<String>();
public Test() {
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
list.add("Five");
method1();
method2();
method3();
}
public void method1() {
System.out.println("Method 1");
int i = 1;
for (String value:list) {
System.out.println((i++) + " = " + value);
}
}
public void method2() {
System.out.println("Method 2");
for (int i = 0; i < list.size(); i++) {
System.out.println((i+1) + " = " + list.get(i));
}
}
public void method3() {
System.out.println("Method 3");
Iterator<String> it = list.iterator();
int i = 1;
while (it.hasNext()) {
System.out.println((i++) + " = " + it.next());
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_* C. 18
method1()类似于method3()for-each循环在幕后使用List的迭代器.不同之method3()处在于您实际上可以访问此迭代器,因此如果要从列表中删除元素,可以在其上调用remove.
method2()另一方面,取决于底层实现,可能导致"糟糕"的表现.如果您的列表是a LinkedList,则get具有O(n)复杂性时间,因此for循环将具有O(n^2)复杂性.使用迭代器,您将始终在恒定时间内获得下一个元素.
我个人会使用1,它也可以编写更少的代码,如果您的意图是对数据结构执行只读操作,这是for-each循环的主要好处之一.
如果您使用的是Java 8并且不需要打印索引,那么您还可以:
list.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |