A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kevin123 中级黑马   /  2012-12-17 14:45  /  2342 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

复习到增强for循环,看了毕老师的总结,想请教,哪位有补充或者举更多的示例,来补充总结一下增强for循环的优缺点,应用场景等?欢迎在此讨论一下
这是毕老师的课堂总结:
高级for循环
格式:
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组)
{

}
对集合进行遍历。
只能获取集合元素。但是不能对集合进行操作。
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
传统for和高级for有什么区别呢?
高级for有一个局限性。必须有被遍历的目标。
建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义脚标。

5 个回复

倒序浏览
1.增强for循环和iterator遍历的效果是一样的,也就说
增强for循环的内部也就是调用iteratoer实现的(可以查看编译后的文件),但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
下面的例子可以证明
  1. public static void main(String[] args)
  2. {
  3. List<Integer> list = new ArrayList<Integer>();
  4. for (int i = 0; i < 5000000; i++)
  5. {
  6. list.add(11);
  7. }


  8. long start = System.currentTimeMillis();
  9. int size = list.size();
  10. int c1 = 1;
  11. for (int i = 0; i < size; i++)
  12. {
  13. c1 = list.get(i);
  14. }
  15. System.out.println("for + get(i)方法: " + (System.currentTimeMillis() - start));


  16. long start2 = System.currentTimeMillis();
  17. for (int c2 : list)
  18. {
  19. }
  20. System.out.println("Iterator(foreach)方法:" + (System.currentTimeMillis() - start2));
  21. }
复制代码
结果:
for + get(i)方法: 94
Iterator(foreach)方法:234
在把ArrayList改为LinkedList,我这里内存溢出了,于是list改成50000
结果:
for + get(i)方法: 6969
Iterator(foreach)方法:0
---------------------

所以在使用的时候适当选择就好了。
回复 使用道具 举报
1.增强for循环和iterator遍历的效果是一样的,也就说
增强for循环的内部也就是调用iteratoer实现的(可以查看编译后的文件),但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
下面的例子可以证明
  1. public static void main(String[] args)
  2. {
  3. List<Integer> list = new ArrayList<Integer>();
  4. for (int i = 0; i < 5000000; i++)
  5. {
  6. list.add(11);
  7. }


  8. long start = System.currentTimeMillis();
  9. int size = list.size();
  10. int c1 = 1;
  11. for (int i = 0; i < size; i++)
  12. {
  13. c1 = list.get(i);
  14. }
  15. System.out.println("for + get(i)方法: " + (System.currentTimeMillis() - start));


  16. long start2 = System.currentTimeMillis();
  17. for (int c2 : list)
  18. {
  19. }
  20. System.out.println("Iterator(foreach)方法:" + (System.currentTimeMillis() - start2));
  21. }
复制代码
结果:
for + get(i)方法: 94
Iterator(foreach)方法:234
在把ArrayList改为LinkedList,我这里内存溢出了,于是list改成50000
结果:
for + get(i)方法: 6969
Iterator(foreach)方法:0
---------------------

所以在使用的时候适当选择就好了。
回复 使用道具 举报
个人理解:
Arraylist是内部是数组,有角标,数组的优势在于查询和修改,能通过角标迅速获得某个元素的值
LinkList内部是链表,没有角标,优势在于增加,删除等操作,不用进行繁琐的角标操做
回复 使用道具 举报
Set<String> set = new HashSet<String>();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
  String str = it.next();
  System.out.println(str);
}
for循环遍历:
for (String str : set) {
      System.out.println(str);
}

其实我个人理解就是:只不过在()创建了一个你需要遍历的数组或者集合的一个变量罢了,剩下的java机制会替你解决,你不用考虑它到底是怎么运行的,这样的技术只要记得怎么使用,没什么太深究的,
回复 使用道具 举报
孙辉辉 发表于 2012-12-17 15:00
1.增强for循环和iterator遍历的效果是一样的,也就说
增强for循环的内部也就是调用iteratoer实现的(可以查 ...

欢迎补充····
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马