1. 程式人生 > >實訓16 2018.04.16

實訓16 2018.04.16

except 實訓 叠代 clas tcl ava 所有 col cep

叠代器

使用叠代器獲取集合(Collection)對象:

  

import java.util.*;

public class TestClass {

    public static void main(String[] args){
        Collection<String> collection=new ArrayList<String>();
        collection.add("a");
        collection.add("b");
        
        for(Iterator<String> it=collection.iterator();it.hasNext();)         
               {
            System.out.println(it.next());
        }
    }
}

  當it.hasNext()為false時,使用it.next()會拋出NoSuchElementException異常。

  在Collection中存儲時如果不設置泛型,那麽默認Object類型對象。當使用其中某個對象的(特有)方法時需要向下轉型。

for-each可以對數組和Collection進行遍歷,而不需要通過下標。遍歷時不能像下標一樣進行增刪。

至此,有三種叠代集合或數組的方式:

  1. for(int i;i<arr.length;++i){}

  2. for each

  3.for(Iterator<String> it=collection.iterator();it.hasNext();) {}

泛型 

Java中的泛型是“偽泛型”,不會被保存到.class文件中。泛型類似於一種規範。

  含有泛型的方法:public <T> T[] toArray(T[] a){}

  含有泛型的接口、類:interface Einter<String>{},class Eclass<E>{}。這裏使用“E”表示始終不確定泛型的類型,直至被調用時才確定。當然也可以在定義時就給定泛型的類型,像定義的接口那樣。

泛型通配符<?> 

public static void printCollection(Collection<?> list) {
    Iterator
<?> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }

  使用泛型通配符類似於使用Object,只能使用Obeject類中的方法。

  其中,

    <? extends Parent>表示接收Parent及其子類的對象;

    <? super Children>表示接收Children及其父類(所有父類,直至Object)的對象。

實訓16 2018.04.16