1. 程式人生 > 其它 >Java中常用容器總結

Java中常用容器總結

1、Collection介面

資料都是單個單個的儲存在其中的。

常用方法:

      boolean   add(Object element)           新增元素

      boolean   remove(Object element)       刪除元素

      boolean   contains(Object element)          查詢該元素,沒有返回false,有則返回位置。

      int   size()                   返回容器大小。

      boolean   isEmpty()              是否為空的。

      void    clear()                 清空容器。

      Iterator   interator()                獲取迭代器。

      boolean    containsAll(Collection  c)        是否包含c容器中所有元素。

      boolean    addAll(Collection c)           把c中的所有元素加到此容器中。

      boolean    remove(Collection  c)           移除本容器和c都有的元素。

      boolean    retainAll(Collection  c)          留下和c的交集。

      Object []    toObject()                轉化成Object陣列。

1.1 List介面

繼承了Collection介面,有序!可以通過索引進行操作。(有序指的是存放順序與放入順序一致)

常用方法:

      void   add(int index ,Object e)        在指定位置插入元素。

      Object    set(int index , Object  e)        修改指定位置元素。

      Object    get(int index)            獲取指定位置元素。

      Object    remove(int index);         刪除指定位置元素。

      int   indexOf(Object  o)           返回該元素第一次出現的位置。

      int   lastIndexOf(Object   o)         返回該元素最後一次出現的位置。

實現類:

      ArryList        內部使用一個會自己擴容的陣列實現,查詢效率高,增刪效率低,執行緒不安全。

      LinkedList    內部使用雙向連結串列實現,查詢效率低,增刪效率高,執行緒不安全。

      Vector     使用陣列實現的,它相關方法增加了同步檢查,執行緒安全!

1.2 Set介面

繼承了Collection介面,元素不能重複,無序。(無序指的是存放順序與放入順序不一致)

要取值出來可以用增強for迴圈遍歷取出。

常用方法:

     見Collection介面常用方法。

實現類:

     HashSet      使用HashMap實現,查詢、增刪效率都高,執行緒不安全,允許值為null。

     TreeSet  對內容自動進行排序,排序規則可以自行確定(繼承Comparable介面,重寫compareTo方法),使用TreeMap實現。

1.3 迭代器Interator

用來遍歷容器中的值。

常用方法:

     hasNext()     判斷是否有下一個元素。

     next()      返回遊標所在元素,並把遊標指向下一個位置。

     remove()    刪除遊標所在位置的元素,在next後該操作只能執行一次。

使用形式:

 Iterator  itr = Cllection的子類物件.iterator();
        while(itr.hasNext()){
            itr.next();
 }  

1.4 Collections工具類

它提供了一些操作Collection容器的簡單方法:

      sort(List   list)                    排序,由小到大。

      shuffle(List   list)               打亂,隨機排序。

      reverse(List   list)              逆序,頭尾顛倒。

      fill(List  list  ,  Object   o)              用o重寫整個list。

      int  binarySearch(List    list  , Object   o)    二分法在list中查詢o,記得先給list排好序,不然會找不到!


2、Map介面

基於Key和Value的結構儲存資料,Key不能重複,value可以重複。

常用方法:

        V   put(K  key , V  value)               新增一對key、value到集合中。

        void   putAll(Map    m)           把m中所有元素加入到集合中。

        V    remove(Object   key)         刪除key對應的value。

        V    get(Object     key)            獲取key對應的value。

        boolean   containKey(Object   key)     判斷是否存在key。

        boolean   containValue(Object   value)    判斷是否存在value。

        Set keySet()                獲取所有的key,存放到Set集合中。

        Set<Map.Entry<K,V>>   entrySet()     返回一個Set,裡面存放的是Map內的一個泛型介面Entry<K,V>,包含了集合的所有對映。

        void   clear()              刪除Map中所有對映。

實現類:

      TreeMap 使用紅黑樹實現的,效率比HashMap低,但是它自動排序,排序規則(繼承Comparable介面,重寫compareTo方法)。

      HashMap   使用雜湊表儲存資料,如果新進來的值key重複,則會覆蓋舊值。

遍歷Map方式一:通過Key集合遍歷。

Set<Integer>  set = map.keySet();
for(Integer i:set){
    //i為key
      System.out.println("key:"+i+"\nvalue:"+map.get(i));
}

遍歷Map方式二:轉為Set,再遍歷。

        /**
         * entrySet返回一個Set集合,這個集合中存放的是Map.Entry<K,V>,
         * 看原始碼,易知Entry是Map的一個內部介面,它有三個方法:getKey()/getValue()/setValue()。
         */
       Set<Map.Entry<Integer,String>>  set=map.entrySet();
       for(Map.Entry<Integer,String> temp:set){
           //獲得key和value
            temp.getKey()
            temp.getValue();
           //可以改變內部的值
           temp.setValue("love");
       }    

遍歷Map方式三:轉為Set,使用迭代器。

    //map把對映內容丟入一個Set<Map.Entry<K,V>>集合中,然後通過.iterator獲得這個Set的迭代器
       Iterator<Map.Entry<Integer,String>>  it = map.entrySet().iterator();
       while(it.hasNext()){
           Map.Entry<Integer,String> temp =it.next();
           System.out.println(temp.getKey()+"->"+temp.getValue());
       }

解釋一個難以理解的方法:

entrySet()方法

  它實現了HashMap物件轉為Set物件,這樣就可以使用迭代器Iterator進行遍歷了。

  但是Set物件裡面存放的比較特殊,是一對資料,Map.Entry<K,V>。

  這個資料有getKey,getValue,setValue三個方法。