当我在 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());
}
}
最佳答案
method1()
与 method3()
类似,因为 for-each 循环在幕后使用 List 的迭代器。 method3()
的不同之处在于您实际上可以访问此迭代器,因此如果您希望从列表中删除元素,可以对其调用 remove。
method2()
另一方面可能会导致“糟糕”的性能,具体取决于底层实现。如果您的列表是 LinkedList
,get
的复杂度时间为 O(n)
,因此 for 循环的复杂度为 O(n^ 2)
复杂性。使用迭代器,您将始终在常数时间内获得下一个元素。
我个人会使用 1,它编写的代码也更少,如果您打算对数据结构执行只读操作,这就是 for-each 循环的主要好处之一。
如果您使用的是 Java 8 并且不需要打印索引,您还可以这样做:
list.forEach(System.out::println);
关于java - 遍历列表,更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29232667/