1. 程式人生 > >黑馬程式設計師----JAVA基礎集合框架_迭代器

黑馬程式設計師----JAVA基礎集合框架_迭代器

------ android培訓java培訓、期待與您交流! ----------

 個人認為總的來說,map不是地圖是對映的意思,所以裡面是鍵值成對存在的,list的清單的意思,所以裡面是一項一項列出來的,set是集合的意思,所以裡面不能有重複的(數學裡面的集合裡面不能有重複元素).

Java的集合類主要由兩個介面派生而出:CollectionMap,Collection和Map是Java集合框架的根介面,這兩個介面又包含了一些介面或實現類。collection下面兩個介面list和set都是繼承了collection,要注意的是這裡三個概念都是介面,而arraylist等才是他們的實現類。下面一個圖摘抄自ibm的教程,可以看出集合介面的繼承關係


 Collection

如果只是存一個值,用Collection

List :元素有序(存入和取出的順序一致),可重複

ArrayList :用的比較多  底層資料結構是陣列。查詢快,增刪慢。執行緒不安全。

LinkedList :可以方便操作頭尾元素,底層資料結構是連結串列。查詢慢,增刪快。執行緒不安全。

Vector :底層資料結構也是陣列實現,但是每次遞增100%.執行緒安全,插入時效率比較高.

Set  元素無序,不可重複。

HashSet:底層資料結構是雜湊表結構。無順序,不可重複,可以保證元素的唯一性。 它如何保證的呢?先hashCode,在equals。

LinkedHashSet : 底層資料結構是連結串列和雜湊結構。元素有序,不可重複,可以讓新增時的順序與取出時的順序一致

TreeSet :底層資料結構是二叉數。保證存入的元素是有序的不會重複,TreeSet有順序,效率比較低 。
   有序是通過兩種方式體現的。
  一種是讓集合具備比較性。
  一種是讓元素本身具備比較性。

為演示具體 Set 類的使用,下面的程式建立了一個 HashSet,並往裡添加了一組名字,其中有個名字添加了兩次。接著,程式把集中名字的列表打印出來,演示了重複的名字沒有出現。接著,程式把集作為 TreeSet 來處理,並顯示有序的列表。

    import java.util.*;public class SetExample
    {
    public static void main(String args[])
    {
    Set set = new HashSet();
    set.add("Bernadine");
    set.add("Elizabeth");
    set.add("Gene");
    set.add("Elizabeth");
    set.add("Clara");
    System.out.println(set);
    Set sortedSet = new TreeSet(set);
    System.out.println(sortedSet);
    }
    }


Map

如果儲存的是關係,key-valueMap

HashMap :底層資料結構是雜湊表。用的比較多。 執行緒不安全。

LinkedHashMap :可以讓新增時的順序與取出時的順序一致

Hashtable :hash實現 不可以有null鍵和null值 執行緒安全

Properties :這個可以和IO進行結合使用。

TreeMap :底層資料結構是二叉數。  用key來進行排序

1. Collection是什麼?

Collection介面是List、Set介面的父介面,其含有集合都具備的抽象方法.同時可以操作這兩個介面。

2. Collection有什麼用?

其實現類叫集合,為一個容器,裡面可以裝不同的物件,並對其進行增刪改查的操作

3. Collection怎麼用?

其本身這些方法是不能用的,但是其實現類實現了就都可以用了,這個叫共有方法

:增加一個物件或集合,增加成功返回true

1.public boolean add(Object obj)   向集合中新增一個元素obj

2.public boolean addAll(Collection c)  向集合中新增一堆元素  c

刪 改:: 刪除某個元素,或刪除所有元素,或將一部分元素刪除.

public void clear() 清空集合

.public boolean remove(Object obj)

將集合中元素obj刪除,如果刪除成功,返回true.一次只能刪除一個.

public boolean removeAll(Collect c) 將集合中與c集合中相同的元素刪除.

:查詢長度,交集,元素是否相同,是否是子集,是否是空集合.

public boolean retainAll(Collection c) 求集合的交集,

public int size(); 得到集合中元素的個數

public boolean contains(Object obj)

判斷集合中是否有與obj相同的元素.這裡面的相同是equals

public boolean containsAll(Collection c)

判斷集合c是否是當前集合的子集.

public boolean isEmpty() 

判斷集合中是否有元素.<A HREF="Demo1.java"></A>size0,代表空,返回true

Object[] toArray()返回包含此 collection 中所有元素的陣列。

4. Collection什麼時候用?

當需要對多個物件進行操作時,就要用到集合

5. Collection有什麼特點?

集合只能放物件

集合分為兩種,一種有序可重複,一中無序不可重複.

Collection介面定義操作集合元素的具體方法大家可以參考API文件,這裡通過一個例子來說明Collection的新增元素、刪除元素、返回集合中元素的個數以及清空集合元素的方法。

public class TestCollection
{
    public static void main(String[] args) 
    {
        Collection c = new ArrayList();
        //新增元素
        c.add("元素一");
        //雖然集合裡不能放基本型別的值,但Java支援自動裝箱
        c.add(6);

        System.out.println("c集合的元素個數為:" + c.size());
       
     //刪除指定元素
        c.remove(6);
       
     System.out.println("c集合的元素個數為:" + c.size());
        //判斷是否包含指定字串
        System.out.println("c集合的是否包含元素一字串:" + c.contains("元素一"));

        c.add("輕量級J2EE企業應用實戰");

        System.out.println("c集合的元素:" + c);        

     Collection books = new HashSet();

        books.add("輕量級J2EE企業應用實戰");
        books.add("Struts2權威指南");

        System.out.println("c集合是否完全包含books集合?" + c.containsAll(books));

        //用c集合減去books集合裡的元素
        c.removeAll(books);

        System.out.println("c集合的元素:" + c);

        //刪除c集合裡所有元素
        c.clear();

        System.out.println("c集合的元素:" + c);

        //books集合裡只剩下c集合裡也同時包含的元素
        books.retainAll(c);

        System.out.println("books集合的元素:" + books);
    }
}

二、Iterator迭代器---重點

1. 迭代器是什麼?

迭代器(iterator)是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器物件代表容器中的確定的地址。迭代器修改了常規指標的介面,所謂迭代器是一種概念上的抽象:那些行為上像迭代器的東西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用演算法有機的統一起來。

2. 迭代器有什麼用?

迭代器提供一些基本操作符:*++==、!==。這些操作和C/C++“操作array元素”時的指標介面一致。不同之處在於,迭代器是個所謂的智慧指標,具有遍歷複雜資料結構的能力。其下層執行機制取決於其所遍歷的資料結構。因此,每一種容器型別都必須提供自己的迭代器。事實上每一種容器都將其迭代器以巢狀的方式定義於內部。因此各種迭代器的介面相同,型號卻不同。這直接匯出了泛型程式設計的概念:所有操作行為都使用相同介面,雖然它們的型別不同。

3. 迭代器怎麼用?

Iterator 迭代器名 集合名.iterator();-----得到一本集合的迭代器物件,

然後用這個物件呼叫Iterator介面中定義的方法,Iterator有三個方法,

迭代器名.hasNext().....迭代器名.next().....迭代器名.remove().....

來實現:

1.public boolean hasNext()  判斷是否有元素進行迭代,沒有返回false,一般用於定義條件標記

2.public Object next();      取到下一個元素

3.public void remove();      刪除元素

    方法可由底層集合有選擇的支援。當底層集合呼叫並支援該方法時,最近一次 next() 呼叫返回的元素就被除去。為演示這一點,用於常規 Collection 的 Iterator 介面程式碼如下:
    Collection collection = …;
    Iterator iterator = collection.iterator();
    while (iterator.hasNext())
    {
    Object element = iterator.next();
    if
    (removalCheck(element))
    {
    iterator.remove();
    }
    }

4. 迭代器什麼時候用?

當需要對集合裡的元素進行遍歷或移除操作時

5. 迭代器有什麼特點?

public Iterator iterator() 得到集合的迭代器.

迭代器模式。Iterator對已集合類中的任何一個實現類,都可以返回這樣一個Iterator物件。

就和迴圈一樣,好處是可以適用於任何一個類,而且實際上java對它進行了優化,

比直接用index訪問快一點(這一點沒法考證,別人都這樣說)。

不過呢,有一點很好,就是用起來確實很好用,加上泛型就更好用啦。

比如說這樣一個例子ArrayList< String > arr = new ArrayList< String >();

Iterator it = arr.iterator();迭代的時候可以這樣while( it .hasNext() ){ //做一些處理,比如 System.out.print( it.next );}配合上泛型,

一個好處是it.next()可以不用型別轉換。以前用的時候是Object,還要自己轉,我感覺,Iterator和泛型簡直就是絕配哈。

------ android培訓java培訓、期待與您交流! ----------