java吧 关注:1,298,906贴子:12,838,943
  • 2回复贴,共1

Java 每日一题:2016年7月24日

取消只看楼主收藏回复

每天在这里贴一道 Java 题。
问题不难,有 Java 的基本知识就可以做出来。
问题也不偏,日常工作中时不时会碰到。
每日一题索引页:52.36.153.52:8080/javaquestions/

main 方法中有两个 for-each循环。哪个循环效率更高?


1楼2016-07-25 12:49回复
    源程序:
    package javaquestions;
    import java.util.ArrayList;
    import java.util.List;
    public class JavaQuestion20160725
    {
    public static void main(String[] args)
    {
    for (Integer i : getNumbers()) // 1
    {
    System.out.print(i + " ");
    }
    System.out.println();
    List<Integer> list = getNumbers();
    for (Integer i : list) // 2
    {
    System.out.print(i + " ");
    }
    }
    public static List<Integer> getNumbers()
    {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 100; i++)
    {
    list.add(i);
    }
    return list;
    }
    }


    2楼2016-07-25 12:51
    回复
      2026-03-08 04:27:50
      广告
      不感兴趣
      开通SVIP免广告
      这两种写法效率都一样。
      两种写法里,getNumbers 方法都是只运行一次。
      for-each 循环实际上是 Iterator 的一种简化形式,和下面的语句是等效的:
      for (Iterator<Integer> iter = getNumbers().iterator(); iter.hasNext();)
      {
      System.out.println(iter.next());
      }
      虽说从效率上看,两种写法都一样。但从变量的作用域来看,第一种写法要好一些。第一种写法中,getNumbers 方法返回的 List 只是在循环体内部使用。第二种写法在循环体外定义了一个 List,这样造成的后果是循环执行完了以后这个 List 变量还存在,也就是说变量的作用域扩大了。写程序时,变量的作用域应该越小越好。


      3楼2016-07-26 11:32
      回复