黑马程序员技术交流社区
标题:
增强for循环的问题
[打印本页]
作者:
克零岚
时间:
2013-3-2 15:19
标题:
增强for循环的问题
学习视频的时候,遇到了增强的for循环,增强的for循环毫无疑问可以遍历数组,那么对于集合的遍历呢,对对象的集合(Collection)和键值对集合(Map)都支持吗?增强的for循环对集合的增删改查操作有限制吗? 还有那么传统的for循环与增强的for循环有什么大的区别吗? 呵呵 ,不好意思,还请前辈们解惑啊,发现东西越学越多了
作者:
李尧
时间:
2013-3-2 15:32
我只知道 增强for循环必须要有遍历的对象.不像传统for有条件表达式.....比如 我要把"hello java"打印5遍 用高级for就很蛋疼...再具体我也不清楚了.
坐等高人来解答吧...{:soso_e104:}
作者:
lzw123451
时间:
2013-3-2 15:39
本帖最后由 李志卫 于 2013-3-2 15:42 编辑
增强For能遍历数组、Collection集合。Map集合的keySet和entrySet也可以(也就是Set集合)。
增强for底层就是用迭代器Iterator实现的,所以我想也会和迭代器限制了集合的其他操作,你可以试一试。
要对List集合遍历进行其他操作可以用Llistiterator.
再补充一下笔记
高级for有一个局限性。必须有被遍历的目标。
(就是要先有(collection)集合或者数组,才能高级for遍历)例如要求输出一百遍 hello world!。
建议在遍历数组时候,还是用传统for。
能用迭代器Iterator的时候就能用高级for,因为高级for的底层就是迭代器完成的,高级for只是一种简写。
高级for for(数据类型 变量名:集合或数组) 中变量类型要求与集合的泛型一致,没有泛型用Object。
作者:
张占忠
时间:
2013-3-2 15:44
增强for是java 1.5的新特性,是为了替代迭代器而出现的,他不但可以遍历数组还可以遍历集合。一般的话,set map 都可用它。
主要看你用进行什么操作,一般如果只是遍历集合的话,用增强fo绝对没错的。
作者:
Benwolf0818
时间:
2013-3-2 18:54
1.首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,
但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
3.而对于LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。
作者:
聂斌
时间:
2013-3-10 01:45
1..对对象的集合(Collection)和键值对集合(Map)都支持吗?
答:不支持的,,因为map集合里面没有迭代器,,,凡是支持迭代器的集合他们都支持高级for,,高级for是迭代器的简写形式
map集合里面为什么没有迭代器:
接口 Collection<E>他里面有迭代器,,Collection接口继承了接口 Iterable<T>,,Iterable<T>里面封装了iterator() 方法返回一个迭代器,,比如出现接口 Collection2<E>继承了接口 Iterable<T>时这个接口 Collection2<E>就具备了迭代方法,,map集合没有实现接口 Iterable<T>,所以map里面没有迭代器
代码:
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"a");
hm.put(2,"b");
hm.put(3,"c");
Set<Map.Entry<Integer,String>> set=hm.entrySet(); 都要转成set集合,因为map集合不支持迭代
//这里不能放map集合,,,,放set集合,,,或者for (Map.Entry<Integer, String> entry : set) {,,这里面的类型是:set集合里面存什么类型那么高级for里面就存什么类 // 型,,比如set里面是Map.Entry类型那么for里面就是Map.Entry
for (Entry<Integer, String> entry : set) {
Integer key=entry.getKey();
String string=entry.getValue();
System.out.println(key+" "+string);
}
或者这样遍历
Set<Integer> set=hm.keySet();
for (Integer i : set) {
System.out.println(i+" "+hm.get(i));
}
2...增强的for循环对集合的增删改查操作有限制吗?
答;增强的for循环对集合进行遍历,只能获取集合元素,但是不能对集合进行操作他只能获取集合中的元素,。只能对集合中的元素进行取出,,不能做修改动作,所以集合中的数据没有改变,,而迭代器可以取出修改,迭代器除了遍历,还可以进行remove集合中元素的动作。迭代器操作完以后集合变了,,,,
如果使用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
3... 还有那么传统的for循环与增强的for循环有什么大的区别吗?
答:有的
高级for有一个局限性,必须有被遍历的目标,比如我想要把"aa"打印100次,,,高级for就做不了就得用传统for,,,,
建议在遍历数组的时候,还是希望使用传统for。因为传统for可以定义脚标。
作者:
amen0205
时间:
2013-3-10 04:56
1 高级for循环 底层实现就是用的迭代器Iterator 因为Map里面没有迭代器 所以高级for只对Collection使用
2 从高级for的格式来看 for(数据类型 变量名:集合或数组); 他除了定义一个变量用来存储取出的值 别的功能说明都没有 而且该变量时局部的 作用范围有限
所以高级for就一个取出的功能 别的没了
3 区别 :两者的使用范围基本完全不同 对数组或集合遍历时用高级for 其他都用传统for
而且建议遍历数组也用传统for 因为可以操作角标
作者:
qinchog
时间:
2013-7-6 20:16
for-each循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,并且没有性能损失,我们应该尽可能地使用for-each循环。但是在以下三种情况下是不能使用for-each的:
1.过滤
如果要遍历集合,并删除选定的元素,就需要使用显势的迭代器,以便可以调用它的remove方法。
2.转换
如果需要遍历列表或者数组,并取代它部分或者全部的元素值,就需要列表迭代器或者数组索引,以便设定元素的值。
3.平行迭代
如果需要并行地遍历多个集合,就需要显式地控制迭代器和数组索引变量,以便所有的迭代器或者索引值变量都可以得到同步前移。
eg:
Java代码
List<Case> caseLists = caseService.getDetailYzjByNo(caseBean
.getCaseNo());
for (Case caseinfo : caseLists) {
if (caseinfo.getCaseTypeId() == 134
&& caseBean.getCaseId() != caseinfo.getCaseId()) {
request.setAttribute("LianBanCase", "LianBanCase");
break;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2