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