java – 循环通过列表,更好的方法

前端之家收集整理的这篇文章主要介绍了java – 循环通过列表,更好的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我在 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.

另一方面,方法2()可能导致“不良”的性能取决于底层的实现.如果您的列表是LinkedList,则get具有O(n)复杂度时间,因此for-loop将具有O(n ^ 2)复杂度.使用迭代器,您将始终在不间断的时间内获取下一个元素.

我个人使用1,它也减少写入代码,这是for-each循环的主要优点之一,如果您的意图是对数据结构执行只读操作.

如果您使用的是Java 8,并且不需要打印索引,您还可以执行以下操作:

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

猜你在找的Java相关文章