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可以定义脚标。
|