集合(一)

1.鏈表

   有序排序的容器:LinkedList

 數組是將對象的引用放在連續的存儲位子中,而鏈表則將每個對象存放在獨立的節點中,每個節點中還存放着序列中下一個節點的引用,也存放着上一個節點的引用。

LinkedList.add()用於將對象添加到列表的尾部,但你有時候肯那個需要把元素插入到列表中的某個位置,這種依賴於位置的add()是由迭代器負責的,因爲迭代器描述的是集合中的位置,使用迭代器來添加元素的方法,只對於由自然順序的集合才由實際意義。

remove方法之前一定要調用一次next方法,不然出java.lang.IllegalStateException。

remove方法將除掉迭代器左邊的那個元素,但是,如果調用的是previous方法,那麼移除的是迭代器右邊的元素!

2.散列集 HashSet 

      散列碼是用hashCode()方法取得的任何整數。取得元素的索引的方式是,先取它的散列碼,再將它減去以散列表元爲模數的值。當找到其索引,當試圖放入元素的時候,假如這個表元上已經有元素,這種現象稱爲散列衝突。 這時必須將新對象和該列表中的所有對象進行比較,查看該元素是否已存在與該列表!

      假如你大致知道散列表最終會有多少個元素,那麼就可以設定散列表元的數量了,一般設置爲元素數量的75%到125%之間,當元素放得太滿得時候就必須再散列。加載因子將決定合適要對散列表進行再散列,假如加載因子是0.75(默認值),而散列表中超過75%,那就進行再散列,表元數量爲原先的兩倍。

      HashSet重寫了Contains(),它只檢查某個表元的所有元素!它數據結構,無法控制元素出現的順序,迭代時候的順序跟你插入元素的數據是不一樣的!

3. 樹集 TreeSet

    它是一個有序集合,不管你按照什麼順序插入,它迭代的時候的順序是一致的。將一個元素放到樹級中的速度比放入散列表中要慢,但是比那些放入數組,鏈表上是要快的。如果樹集中有n個元素,平均要運行log2 n,假如有1000個元素,那麼要運行10次比較。

4. 優先級隊列 PriorityQueue

    當調用add()和remove()方法的時候,會使最小的元素移到樹根,用remove()會把集合中最小的元素移除掉的。但,它不對元素的全部進行排序,而是用一種叫堆的數據結構。

5. 映射表 HashMap  TreeMap

   HashMap是散列映射表,對鍵進行散列,不對元素散列。

   TreeMap是樹狀映射表,對鍵進行排序,不對元素排序。

6. 試圖和包裝器

   試圖:比如,Map的keySet()方法返回的是一個實現Set接口的類的對象,同時該類的各個方法對源映射文件進行操作,這種集合叫做試圖。也比如Arrays.asList(Object[] o);

   可以調用get,set方法訪問底層數組,但是調用那些改變數組大小的方法就跑出異常,例如,remove,add。

7.算法

  二分查找

      假如,這個數組是排序好的,那麼檢查數組中間的元素,假如比要找的元素小,則繼續在下半部分數組中繼續分割繼續比較!這就是爲什麼調用sort方法之前要排序的原因了,到了今天我才名字這是爲什麼了 !^_^!

      採用隨即訪問方式才能使二分查找變得有意義,假如爲了檢查中間的元素而用迭代到中間元素,那就失去了二分查詢法的優勢!因此,對於鏈表的查找,BinalySerach算法變成了線性查找。

 

  

 

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