当我在
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);