java集合的小小總結

集合框架的內容太多太複雜,一旦不用就很容易忘記,於是我打算記錄下來一些我的學習過程,在多多看API開發文檔來提高自己的能力 。個人的理解或者哪裏錯了,希望各位大哥可以指出來,大家一起學習

每種編程語言中都有集合,最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨着集合的廣泛使用,Java1.2提出了囊括所有集合接口、實現和算法的集合框架。在保證線程安全的情況下使用泛型和併發集合類,Java已經經歷了很久。它還包括在Java併發包中,阻塞接口以及它們的實現。集合框架的部分特點如下:

  (1)使用核心集合類降低開發成本,而非實現我們自己的集合類。

  (2)隨着使用經過嚴格測試的集合框架類,代碼質量會得到提高。

  (3)通過使用JDK附帶的集合類,可以降低代碼維護成本。

  (4)複用性和可操作性!

       (5)用來存儲對象,如果對象的個數不確定

       (6)集合的長度是可變的,很靈活

       (7)集合是依賴對象而生的,所以就對基本數據類型"不感興趣",所以集合中不可以存儲基本數據類型值(但是實際是可以放的,存在自動拆箱和裝箱功能)

                                    

  List<Integer> list = new ArrayList<Integer>();
                                        list.add(1);
                                       //打印結果爲1
                                    System.out.println(list.get(0));


   

------------------------------------------------------------------------------------------------------------------------------------

                                         集合的一些好用的小技巧

需要數據唯一嗎?

需要:set()

                 需要制定順序嗎:

                                                 需要:treeSet

                                                 不需要:HashSet

                                                 但是想要一個和存儲一致的順序:LinkedHashSet

不需要:List()(有序)

              需要頻繁增刪嗎?

             需要:LinkedList

            不需要:ArrayList

ps:有序指的是插入的順序

------------------------------------------------------------------------------------------------------------------------------------

如何記錄每一個容器的結構和所屬體系呢?

看名字!


List
    |--ArrayList
    |--LinkedList

Set
    |--HashSet
    |--TreeSet

後綴名就是該集合所屬的體系

前綴名就是該集合的數據結構

看到   array(ArrayList,):就要想到數組,就要想到查詢快,有角標

看到    Link(   LinkedList  ,  LinkedHashSet  ,  LinkedHashMap   )  :   就要想到鏈表,就要想到增刪快,就要想到

                            增:add()  ; 

                            返回index位置的元素 :get(int index)  ;

                             移除第一個或者最後一個元素  :  remove+frist last();
看到hash(   HashSet   ,    HashMap   ): 就要想到哈希表,就要想到唯一性,就要想到覆蓋hashcode()方法和equals()方法

              ps:覆蓋它們的好處是利於查找,減少循環次數,提高效率,這兩者的關係爲:equals()相等的兩個對象,hashcode()一定相等,equals()不相等的兩個對象,有可能hashcode()不相等,也有可能相等。hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。詳細可以看這裏:http://www.360doc.com/content/14/0527/09/15113968_381327452.shtml


看到 tree (  treeSet  , TreeMap )  :   就要想到二叉樹,就要想到排序,就要想到實現兩個接口Comparable,Comparator

       ps:TreeSet是依靠TreeMap來實現的。TreeSet是一個有序的set。它實現了Comparable.用於比較排序。。詳細可以看連接 :http://blog.csdn.net/dreamwbt/article/details/53185592            http://www.cnblogs.com/ningvsban/archive/2013/05/06/3062535.html


========================================================================

Map:一次添加一對元素。Collection 一次添加一個元素。
    Map也稱爲雙列集合,Collection集合稱爲單列集合。
    其實map集合中存儲的就是鍵值對。
    map集合中必須保證鍵的唯一性。

常用方法:
1,添加。
    value put(key,value):返回前一個和key關聯的值,如果沒有返回null.

2,刪除。
    void  clear():清空map集合。
    value remove(key):根據指定的key翻出這個鍵值對。

3,判斷。
    boolean containsKey(key):
    boolean containsValue(value):
    boolean isEmpty();

4,獲取。
    value get(key):通過鍵獲取值,如果沒有該鍵返回null。
                    當然可以通過返回null,來判斷是否包含指定鍵。
    int size(): 獲取鍵值對的個數。
   


Map常用的子類:
    |--Hashtable :內部結構是哈希表,是同步的。不允許null作爲鍵,null作爲值。
        |--Properties:用來存儲鍵值對型的配置文件的信息,可以和IO技術相結合。         
    |--HashMap : 內部結構是哈希表,不是同步的。允許null作爲鍵,null作爲值。
    |--TreeMap : 內部結構是二叉樹,不是同步的。可以對Map集合中的鍵進行排序。

ps:

    同步設計到線程的問題,列入a線程調用Hashtable的size方法(還沒調用完)

    這時B線程也來調用size方法的話,就要排隊等候,因爲a正在調用

    如果是非同步的話,a,b可以在同一時間對Hashtable的一個方法










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