java – 当我遍历List时,哪种方法最有效?
List<T> list = new ArrayList<T>(); 1方法: for(int i = list.length - 1; i >= 0; i--) { System.out.println(list.get(i)); } 2方法: for(T t : list) { System.out.println(t); } 3方法: Iterator<T> it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } 解决方法
效率不太可能显着 – 当然,System.out.println更可能是您特定示例中的瓶颈.
第二种方法(增强的循环)是最可读的.请注意,这三种方法不会做同样的事情 – 第一种方法将从结束而不是从开始迭代.获得正确的行为几乎总是胜过少量,快一点.您的代码越可读,您就越有可能做到正确. 寻求可读性,衡量应用程序的性能,如果它成为一个问题,微观优化瓶颈(继续测量每一步). 编辑:我的答案基于问题的第一行,显示了一个ArrayList< T>正在使用. 如果您想要任何List< T>的答案那时根本就没有准确的答案.列表与LT; T>不提供任何有关复杂性的保证.它并没有说明你应该达到多快,也不会说你期望迭代器的速度有多快.您可能正在使用具有良好随机访问权限的实现,但这是一个非常缓慢的迭代器.这不太可能,但它仍然是一个有效的List< T>. 简而言之:如果你担心效率,你需要知道你正在使用什么样的列表.通常,迭代它可能是合理有效的,并且随机访问可能有效也可能无效. (它可能比迭代更有效,但它不太可能显着提高效率.)在实践中,我的经验是,在大多数应用程序中,你实际上有足够的知识来做出合理的判断……但我通常仍会编写代码可读性首先. 正如其他人所指出的那样,如果你确实想使用随机访问来获取元素,那么确保你的列表也实现 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |