JavaAPI學習——java.lang(二)

6 Iterable<T>

  • 已知經常使用子接口:Collection<T>、List<T>、Set<T>;
  • 實現該接口的類能夠成爲foreach 語句的目標
List<String> list = new ArrayList<String>();
for(List item : list){
    do something...
}
  • 惟一方法:Iterator<T> iterator():返回一個在一組 T 類型的元素上進行迭代的迭代器。
//使用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(); //移除該元素
        }

7 Readable: 爲Scanner類專門建立的接口。

  • 實例化一個Scanner對象,構造方法的入參能夠是任何實現了Readable接口的類的對象,該類實現Readable接口的read()方法,當調用Scanner對象的next()方法時,講使用本身實現的read()方法。
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循環體。多線程

8 Runnable

  • 實現該接口的類必須實現run()方法,run()方法的實現將在新的線程中執行;
  • Thread類實現了Runnable接口,因此一個類經過繼承Thread類實現多線程,也是間接的採用實現Runnable接口。
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

相關文章
相關標籤/搜索