/**
* forEach语句的使用:
* for(类型 变量 :Collection 集合 or 数组) {}
*/
public class ForEachDemo {
public static void main(String[] args) {
int [] is = {1,55,63,28,96,107,36};
List<String> ls = new ArrayList<String>();
Map<Integer, String> mp = new HashMap<Integer,String>();
System.out.println("数据数据:");
forEach1(is);
System.out.println("List数据:");
forEach2(ls);
System.out.println("Map数据:");
forEach3(mp);
//JDK5.0传递可变参数
int con = fonctions(2,5,99,66,555,12);
System.out.println("累计和为:"+con);
}
//参数个数不确定:int a,int ... arr.错误写法:int ... arr,int a
private static int fonctions(int a,int ... arr) {
int con = 0;
for (int i = 0; i < arr.length; i++) {
con+=arr[i];
}
return con+a;
}
//forEach循环不能迭代双列集合,所以先转换为单列集合,根据key获取value
private static void forEach3(Map<Integer, String> mp) {
mp.put(20, "小明");
mp.put(33, "小强");
mp.put(12, "王五");
System.out.println("转换方式一:");
for (Integer key:mp.keySet()){
String val = mp.get(key);
System.out.println(key+": "+val);
}
System.out.println("转换方式二:");
for (Map.Entry<Integer, String> me : mp.entrySet()) {//使用entrySet()方法
String val = me.getValue();
Integer key = me.getKey();
System.out.println(key+":"+val);
}
}
private static void forEach1(int[] is) {
for (int i : is) {
System.out.println(i);
}
}
private static void forEach2(List<String> ls) {
ls.add("abc");
ls.add("cbd");
ls.add("nba");
ls.add("dcoooll");
/** 下面是系统中自己生成的代码,可以看出Java在,jdk1.5内部实现也是调用了下面代码。
for (Iterator<String> iterator = ls.iterator(); iterator.hasNext();) {
String str = iterator.next();
System.out.println(str);
}
*/
for (String str : ls){
System.out.println(str);
}
}
}
/**
* forEach和for的区别:
* 1.for可以自定义循环控制的条件,并且可以多次操作。
* 2.forEach,使用的范围必须是数组、单列集合Collection、List.....
* 3.如果要对数组的角标操作,建议使用for
*/
运行结果:
数据数据:
1
55
63
28
96
107
36
List数据:
abc
cbd
nba
dcoooll
Map数据:
转换方式一:
33: 小强
20: 小明
12: 王五
转换方式二:
33:小强
20:小明
12:王五
累计和为:739