13.Java語言Collection集合、泛型

Collection集合

1.集合:

a)集合是一種容器,用來存儲數據

b)集合的長度不固定,數組的長度固定

c)Java中定義了很多集合類,用於存儲不同數據結構的數據

d)有些數據結構會導致增刪慢,改查快,有些相反

e)Java中集合體系圖

2.Collection集合:

包名:java.util.Collection

單列集合類的根接口,用於存儲一些符合某種規則的元素。

常用方法:

1.增加

a).把給定的元素添加到集合中 public boolean add(E e){}

ArrayList<String> list = new ArrayList<>();
list.add("aaaaa");

2.刪除

刪除集合中的元素

a).清空集合中的所有元素,public void clear() {}

ArrayList<String> list = new ArrayList<>();

list.clear();

b).刪除指定內容 public boolean remove(Object o){}

ArrayList<String> list = new ArrayList<>();

list.remove("ce");

3.判斷

a).判斷集合是否爲空, public boolean isEmpty() {}

ArrayList<String> list = new ArrayList<>();

list.isEmpty();

b).判斷集合中是否包含給定的元素public boolean contains(Object o) {}

ArrayList<String> list = new ArrayList<>();

list.contains("ce");

4.獲取

a)獲取集合中元素的個數,public int size() {}

ArrayList<String> list = new ArrayList<>();

list.size();

b)把集合中的元素,存儲到數組中,public Object[] toArray() {}

ArrayList<String> list = new ArrayList<>();

list.toArray();

Iterator迭代器

Iterator接口,java.util.Iterator

public Iterator iterator() : 獲取集合對應的迭代器,用來遍歷集合中的元素的。

1.Iterator迭代器的使用:

public class CollectionTest {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();

        list.add("aaaaaa");

        //獲得迭代對象

        Iterator<String> it = list.iterator();

        System.out.println(it.next());

    }

}

 
aaaaaa

2.Iterator接口常用方法:

a).public E next() :返回迭代的下一個元素

b).public boolean hasNext() :如果仍有元素可以迭代,則返回 true。

 

使用next()方法,當沒有下一個元素的時候,再次調用就會拋出

java.util.NoSuchElementException沒有集合元素的錯誤

       所以會配合hasNext()方法使用,當有元素時才獲取下一個元素

1.實現原理

內部採用指針的方式跟蹤集合元素,在沒有調用next()方法之前,指針指向集合之前,當調用方法後,返回集合的第一個元素並且指針向後移動一個元素。

增強for

增強for循環,也叫foreach循環,專門用來遍歷數組和集合中的元素,它的內部原

理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作

1.for-each循環示例:

public static void main(String[] args) {

    //定義一個數組

    int[] arrInt = {1,2,123,12,44,23,432};

    //使用foreach循環遍歷輸出

    for (int k:arrInt) {

        System.out.println(k);

    }



    //定義一個集合

    ArrayList<String> list = new ArrayList<>();

    list.add("aaa");

    list.add("bbb");

    list.add("ccc");

    //遍歷輸出

    for (String str:list) {

        System.out.println(str);

    }

}

 

泛型

可以在類或方法中預支地使用未知的類型。一般在創建對象時,將未知的類型確定具體的類型。當沒有指定泛型時,默認類型爲Object類型

1.泛型的好處:

a)當存儲不同類型的數據到一個集合中的時候,可以自動檢測錯誤。

b)避免了類型強轉的麻煩

2.泛型的定義與使用:

a)含有泛型的類:

修飾符 class 類名<代表泛型的變量> { }

例如,API中的ArrayList集合:

class ArrayList <E>{

      public boolean add(E e){ }

public E get(int index){ }

....

 }

E是未知的一種數據類型 未來傳遞什麼就是什麼類型 

使用格式:

       創建對象的時候確定泛型的類型

2.含有泛型的方法

修飾符 返回值類型 方法名(參數){ }

例如:

public class MyGenericMethod {

public <MVP> void show(MVP mvp) {

System.out.println(mvp.getClass());

 }

public <MVP> MVP show2(MVP mvp) {

return mvp;

}

}

              使用格式:

                     調用方法時確定泛型的類型

3.含有泛型的接口:

修飾符 interface接口名<代表泛型的變量> { }

public interface MyGenericInterface<E>{

public abstract void add(E e);

public abstract E getE();

}

              使用格式:

1.定義類的時候確定泛型的類型

2.始終不確定泛型的類型,直到創建對象時,確定泛型的類型

4.泛型的通配符:

可以接收具有任何泛型的集合;<?>

1.泛型的上限     <? extends 類名>

參數只能接收,此類或者此類子(孫)類的集合

2.泛型的下限     <? super 類名>

參數只能接收,此類或者此類父(爺)類的集合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章