java - 遍历列表,更好的方法

标签 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());
    }
}

最佳答案

method1()method3() 类似,因为 for-each 循环在幕后使用 List 的迭代器。 method3() 的不同之处在于您实际上可以访问此迭代器,因此如果您希望从列表中删除元素,可以对其调用 remove。

method2()另一方面可能会导致“糟糕”的性能,具体取决于底层实现。如果您的列表是 LinkedListget 的复杂度时间为 O(n),因此 for 循环的复杂度为 O(n^ 2) 复杂性。使用迭代器,您将始终在常数时间内获得下一个元素。

我个人会使用 1,它编写的代码也更少,如果您打算对数据结构执行只读操作,这就是 for-each 循环的主要好处之一。

如果您使用的是 Java 8 并且不需要打印索引,您还可以这样做:

list.forEach(System.out::println);

关于java - 遍历列表,更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29232667/

相关文章:

java - 序列化 ArrayList Java

Java排序逻辑和识别两个对象的最大值

java - ArrayList.clear() 是否会递归地使所有对象无效?

java - 使用 AJAX、JAVA WS-RS @Post 发送 Xml

java - 如何使用 jung 添加菜单来更改图形布局

c - 为什么这段C代码会陷入无限循环?

javascript - 在 Javascript 中同时做两件事

java - 如何通过单击按钮来销毁框架?

java - 从任何 Activity 访问 int

python - 使用两个隐式循环迭代数组