我们所熟悉的for循环形式是for(;;),但是还有一种增强版的for循环形式(
for(obj:list)),是jdk1.5的新特性,一直容易忘记,现在对它的使用规则做一下记录。
1.参数介绍:
参数list是for循环需要遍历的对象,而此对象的类型必须是一个数组或者是实现了java.lang.Iterable接口的一个实例,不然编译不会通过。当循环第一次的时候,就把储存在list中的第一个对象赋值给obj,这就意味着obj的类型必须和list存放的对象的类型相匹配。
2.例子说明:
for (WebsitesList web :lw) {
obj=new JSONObject();
obj.put("webname",web.getWebname());
obj.put("click",web.getDayClick());
jsona.add(obj);
}
这个for循环的功能是把lw(是ArrayList类型)中的数据赋值给web对象,同时放在json数组之中,其实也相当于如下的写法:
for (int i=0;i<lw.size();i++){
WebsitesList web=lw.get(i);
obj=new JSONObject();
obj.put("webname",web.getWebname());
obj.put("click",web.getDayClick());
jsona.add(obj);
}
通过上面的例子可以看出:第一种写法比较方便和快捷,适合多多使用。
3.备注:
符合list的对象类型有:
AbstractCollection, AbstractList, AbstractQueue,AbstractSequentialList, AbstractSet, ArrayBlockingQueue,ArrayDeque, ArrayList, AttributeList, BeanContextServicesSuppo
rt,BeanContextSupport, ConcurrentLinkedQueue, ConcurrentSkipListSet,CopyOnWriteArrayList, CopyOnWriteArraySet, DelayQueue, EnumSet,HashSet, JobStateReasons, LinkedBlockingDeque, LinkedBlockingQueue,LinkedHashSet, LinkedList, PriorityBlockingQueue, PriorityQueue,RoleList, RoleUnresolvedList, Stack, SynchronousQueue, TreeSet,Vector