集合體系

    我們知道用於存儲對象的容器有數組,也有集合。既然有了數組,爲什麼又出現集合呢?下面先說說它們的區別。

集合與數組的區別:

1:數組是固定長度的,集合是可變長度的。

2:數組可以存儲基本數據類型,也可以存儲引用數據類型;集合只能存儲引用數據類型。

3:數組存儲的元素必須是同一個數據類型;集合存儲的對象可以是不同數據類型。

 

             對於集合容器,有很多種。因爲每一個容器的自身特點不同。其實原理在於每個容器的內部結構不同。集合容器在不斷向上抽取過程中。出現了集合體系。

集合體系:


 

List:有序(元素存入集合的順序和取出的順序一致),元素都有索引。元素可以重複。

    |--ArrayList:底層的數據結構是數組,線程不同步,ArrayList替代了Vector,查詢元素的速度非常快。

    |--LinkedList:底層的數據結構是鏈表,線程不同步,增刪元素的速度非常快。

    |--Vector:底層的數據結構就是數組,線程同步的,Vector無論查詢和增刪都巨慢。

List集合因爲角標有了自己的獲取元素的方式: 遍歷。

for(int x=0; x<list.size();x++){

  sop("get:"+list.get(x));

}

 

Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一種,迭代器

  |--HashSet:底層數據結構是哈希表,線程是不同步的無序,高效;

      HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成的。

      當元素的hashCode值相同時,才繼續判斷元素的equals是否爲true。

      如果爲true,那麼視爲相同元素,不存。如果爲false,那麼存儲。

      如果hashCode值不同,那麼不判斷equals,從而提高對象比較的速度。

     |--LinkedHashSet:有序,hashset的子類。

  |--TreeSet:對Set集合中的元素的進行指定順序的排序。不同步。TreeSet底層的數據結構就是二叉樹。

對於ArrayList集合,判斷元素是否存在,或者刪元素底層依據都是equals方法。

對於HashSet集合,判斷元素是否存在,或者刪除元素,底層依據的是hashCode方法和equals方法。

 

TreeSet集合排序有兩種方式,Comparable和Comparator區別:

1:讓元素自身具備比較性,需要元素對象實現Comparable接口,覆蓋compareTo方法。

2:讓集合自身具備比較性,需要定義一個實現了Comparator接口的比較器,並覆蓋compare方法,並將該類對象作爲實際參數傳遞給TreeSet集合的構造函數。

第二種方式較爲靈活。


Map集合:

|--Hashtable:底層是哈希表數據結構,是線程同步的。不可以存儲null鍵,null值。

|--HashMap:底層是哈希表數據結構,是線程不同步的。可以存儲null鍵,null值。替代了Hashtable.

|--TreeMap:底層是二叉樹結構,可以對map集合中的鍵進行指定順序的排序。

 

Map集合存儲和Collection有着很大不同:

Collection一次存一個元素;Map一次存一對元素。

Collection是單列集合;Map是雙列集合。

Map中的存儲的一對元素:一個是鍵,一個是值,鍵與值之間有對應(映射)關係。

特點:要保證map集合中鍵的唯一性。

 

        而在開發中,集合通常和泛型一起使用。泛型是當類中的操作的引用數據類型不確定的時候,以前用的Object來進行擴展的,現在可以用泛型來表示。這樣可以避免強轉的麻煩,而且將運行問題轉移到的編譯時期。


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