List<String> list = new ArrayList<String>(); for(List item : list){ do something... }
//使用Iterator<T> 遍历Collection对象 List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { list.add(i); } Iterator iterator = list.iterator(); while(iterator.hasNext()){ //判断是否存在下一个元素 int itme = (int) iterator.next(); //获取下一个元素 System.out.println(itme); iterator.remove(); //移除该元素 }
package com.heisenberg.Learn; import java.nio.CharBuffer; import java.util.Scanner; import static java.lang.System.*; public class Test implements Readable{ private int readCount = 1;//read()执行次数 private int loopCount = 1; public Test() { } public int read(CharBuffer cb) { if (loopCount == 1){ out.println("进入read执行第" + readCount + "次"); readCount++; cb.append("aa bb cc "); loopCount++;return 1; }//仅仅在第一次和第六次给CharBuffer添加3个数据 if (loopCount == 2){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; }//其余的时候返回1,可是并不往Buffer中存放数据,来骗被调用者hasNext(),来观察出现了什么现象 if (loopCount == 3){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 4){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 5){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 6){ out.println("进入read执行第" + readCount + "次"); readCount++; cb.append("oo pp qq "); loopCount++; return 1; } if (loopCount == 7){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 8){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 9){ out.println("进入read执行第" + readCount + "次"); readCount++; loopCount++; return 1; } if (loopCount == 10){ out.println("进入read执行第" + readCount + "次"); readCount++; return -1; } return 1; } public static void main(String[] args) { int a = 1;//外层循环的次数 Scanner s = new Scanner(new Test()) ; while(s.hasNext()){//这个hasNext()方法会调用read()方法的 out.println("第" + a + "次执行外层循环"); a ++; System.out.println("从cb中读出 " + s.next()); } } }
以上demo的运行结果为:
进入read执行第1次
第1次执行外层循环
从cb中读出 aa
第2次执行外层循环
从cb中读出 bb
第3次执行外层循环
从cb中读出 cc
进入read执行第2次
进入read执行第3次
进入read执行第4次
进入read执行第5次
进入read执行第6次
第4次执行外层循环
从cb中读出 oo
第5次执行外层循环
从cb中读出 pp
第6次执行外层循环
从cb中读出 qq
进入read执行第7次
进入read执行第8次
进入read执行第9次
进入read执行第10次java
当调用s.hasNext()时,程序会判断字符缓冲区中是否还有未读字符,若是有,则返回true,调用s.next()时,返回未读字符串第一个空格前的全部字符。若是缓冲区中没有未读字符,则调用Readable.read()方法,向字符缓冲区中放入字符,Readabel.read()返回-1以外的任何整数,当字符缓冲区没有未读字符时,都将会继续调用Readable.read()方法,直到Readable.read()方法返回-1,才会结束while循环体。多线程
package com.heisenberg.Learn; import static java.lang.System.*; public class Test implements Runnable{ @Override public void run() { for (int i = 0 ; i< 10; i++) { out.println("新线程中的第" + i + "次循环"); } } public static void main(String[] args) { Thread newThread = new Thread(new Test()); newThread.start(); for (int i = 0 ; i< 10; i++) { out.println("main方法中的第" + i + "次循环"); } } }
可能的一种运行结果为:
main方法中的第0次循环
main方法中的第1次循环
新线程中的第0次循环
新线程中的第1次循环
main方法中的第2次循环
main方法中的第3次循环
main方法中的第4次循环
main方法中的第5次循环
main方法中的第6次循环
main方法中的第7次循环
main方法中的第8次循环
main方法中的第9次循环
新线程中的第2次循环
新线程中的第3次循环
新线程中的第4次循环
新线程中的第5次循环
新线程中的第7次循环
新线程中的第8次循环
新线程中的第9次循环app