集合類collection類詳解和set map簡介





  1. 集合

    1. List、Map、Set的常用函數;

    2. 將一個ArrayList轉化爲指定類型的數組;

       

    3. 遍歷List、Map、Set(3種方法);

    4. 邊遍歷,邊刪除List、Set的元素;

      遍歷集合舉例:

      package day4demo;
      
      import java.util.*;
      
      
      
      public class day4demo6 {
      
      
      
          /**
      
           * @param args
      
           */
      
          public static void ergodiclist1(List<String> list)
      
          {
      
              Object[] obj=list.toArray();
      
              for(int i=0;i<obj.length;i++)
      
              {
      
                  System.out.println(obj[i]);
      
              }
      
          }
      
          public static void ergodiclist2(List<String> list)
      
          {
      
              for(String it:list)
      
              {
      
                  System.out.println(it);
      
              }
      
          }
      
          public static void ergodiclist3(List<String> list)
      
          {
      
              Iterator<String> it=list.iterator();
      
              while(it.hasNext())
      
              {
      
                  System.out.println(it.next());
      
              }
      
          }
      
          public static void ergodiclist4(List<String> list)
      
          {
      
              for(int i=0;i<list.size();i++)
      
              {
      
                  System.out.println(list.get(i));
      
              }
      
          }
      
          public static void ergodiclist5(List<String> list)
      
          {
      
      
      
                  for(int i=0;i<list.size();i++){ 
      
                      if(list.get(i).equals("bobge")){ 
      
                         list.remove(i); 
      
                      } 
      
                  } 
      
                  System.out.println(list); 
      
          }
      
          public static void main(String[] args) {
      
              // TODO Auto-generated method stub
      
              List<String> list=new ArrayList<String>();
      
              list.add("bobge");
      
              list.add("wangchao");
      
              list.add("zhangyan");
      
              ergodiclist1(list);
      
              ergodiclist2(list);
      
              ergodiclist3(list);
      
              ergodiclist4(list);
      
      ergodiclist5(list);
      
          }
      
      
      
      }

       

      通過該題來總結一下集合的相關知識:

      集合類的說明:

      Collection(iterator方法遍歷)

               -List (add)           //將以特定次序存儲元素。所以取出來的順序可能和放入順序不同。

                         -LinkedList (get  remove insert等方法 )

                         -ArrayList             (size,isEmpty,get,set等方法,時間複雜度都是常數,但是add添加N個元素方法的時間複雜度是O(N))

                         -Vector

                                  -Stack

               -Set                     //不能有重複值

                         -HashSet

                         -TreeSet

      Map

               -HashMap

               -HashTable

               -WeakHashMap

       

      List接口:(涉及到堆棧,隊列等操作

               從上面的結構圖可以看出實現List接口的常用類有LinkedList,ArrayList,Vector和Stack.

      List除了具有從collection繼承下來的iterator方法外,自身還提供了一個listiterator方法,返回了一個listiterator接口,與collection繼承下來的iterator方法相比,多了一些add()之類的方法,允許添加,刪除和設定元素,還允許向前向後遍歷。

      LinkedList(需要快速插入,刪除元素):允許null鍵null值,此外LinkedList還提供額外的get,remove,insert方法。這些方法可以使LinkedList用作堆棧,隊列,或者雙向隊列。(LinkedList沒有同步方法,如果多個線程同時訪問一個LinkedList,則需要在創建list的時候構建一個同步的list)

      List list = Collections.synchronizedList(new LinkedList(...));

             ArrayList(需要快速隨機訪問元素):允許所有的元素包括nullArrayListLinkedList一樣沒有同步方法,它實現了可改變大小的數組(因爲每個ArrayList實例都有一個容量(Capacity,用於存儲數組元素的大小。隨着增加元素而自動增加,但是它沒有定義增加的算法,所以當需要插入大量的數據時可以用ensureCapacity(size+1)方法來增加ArrayList的容量用來提高插入效率。   

      public void add(int index, E element) {

          if (index > size || index < 0)

              throw new IndexOutOfBoundsException(

              "Index: "+index+", Size: "+size);

       

          ensureCapacity(size+1);  // Increments modCount!!

          System.arraycopy(elementData, index, elementData, index + 1,

                   size - index);

          elementData[index] = element;

          size++;

          }

             Vector:非常類似於ArrayList,也實現了可變大小的數組。但是Vector是同步的,由它創建的iterator雖然也是繼承了collection接口,但是由於它是同步的,當一個線程改變了Vector的狀態(如刪除或者添加一些元素),這時候iterator方法會拋出ConcurrentModificationException異常,所以使用Vectoriterator方法必須捕獲該異常。

             Stack類:繼承自Vector,實現了先進後出的堆棧,提供了基本的POPPUSH方法,還有peek方法得到棧頂元素,empty檢測棧低是否爲空,search方法搜索元素所在位置。

      Set接口:

             由結構圖可以知道實現set接口的常用類用hashsettreesetSet的構造函數有一個很明顯的約束條件就是傳入collection的參數不能包含重複的元素。因此在對Set元素進行操作時要小心,如果出現obj1.equals(obj2)可能會出現問題。

      Map接口:

             Map接口和setlist接口不同,它不是繼承自collection。它提供keyvalue的映射,map的內容可以說是一組key集合或者一組value集合或者一組key-value的映射。因爲一個key只能映射到一個value。而一個map不能有相同的key。它提供三種集合的視圖:

       


        注意:儘量返回接口而非實際的類型,如返回List而非ArrayList,這樣如果以後需要將ArrayList換成LinkedList時,客戶端代碼不用改變。這就是針對抽象編程。如果程序在單線程環境中,或者訪問僅僅在一個線程中進行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應該使用同步的類。

       

發佈了38 篇原創文章 · 獲贊 25 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章