Java心得--索引值、列舉程式__Java

來源:互聯網
上載者:User

1. 集(Set):和數學上的“集合”概念相對應,是最簡單的一種集合。

Set集合中不區分元素的順序,因此也就不記錄元素的加入順序。

Set集合中不包含重複元素,即任意的兩個元素e1和e2都有e1.equals(e2)=false,並且最多有一個null元素。

2. 實現了Set介面的類HashSet

“基於散列表”的檢測重複元素的策略:HashSet裡的元素值同這個元素在Set裡所存放的索引位置有個對應關係(散列函數),在HashSet裡插入元素前,可根據這個元素值和對應關係,計算出這個元素在HashSet裡的插入位置,如果在這個位置裡(或位置周圍)已經存在了待插入元素的值,則不能插入。 

µ   構造方法

ü    HashSet()

ü    HashSet(<E> c)

µ   其他方法

ü    boolean contains(Object o) 判斷是否存在指定元素

          剩下繼承父類的方法。該類中沒有get方法。

4.      第一類集合有著共同的特性:它們儲存的對象都是一元的(線性),只不過儲存的方式和使用的資料結構不同,以Collection為基類--封裝了線性表的插入、刪除等基本操作。

第二類集合的共同特性就是它們存放的資料都是二元的,稱其為“鍵-值”對,通過它們可以快速的根據一個關鍵字key來得到其所對應的值value,這裡之所以稱其為關鍵字就是因為它必須是唯一的,這樣才能保證每次通過key所得到的value是固定的,即最近一次設定進去的那個值value.

List介面和Set介面都是Collection的子介面                          

      實現List介面:基於線性鏈表來存放資料的,例如Vector

      實現Set介面:它們不允許有重複的元素,且元素無序(取出的元素跟加入的順序沒關係);例如HashSet。

5. 在Java中,專門建立以Hashtable為代表的“鍵-值”對類型對象,“鍵”--索引資訊,而“值” –同索引值相對應的資訊。

¯   為什麼要使用“鍵-值”對型的資料結構

µ   原因:便於資訊檢索,提高在大資料量裡檢索資訊的速度。

µ   工作原理

(1)如果要從其中查詢指定資料的話,不得不依次遍曆這個數組,這樣效率會很低。

(2)換一種思路:將10存入數組不是插入在第一個空閑空間裡。

µ   存在“索引衝突” 問題:對於散列函數,不同的“值”會得到相同的“鍵”,即不同的對象可能存放在同一個索引位置上。

µ   解決方案

ü    採用技術上的方法,例如設計出盡量降低衝突情況出現的散列函數,或者是指定衝突發生時的應對策略;

ü    根據待儲存的資料量,適當提高Hash表的容量--用加大空間的代價,來取衝突發生的低機率

新問題:如何根據Hash表裡的儲存資料量,開闢Hash表的儲存空間。

è裝載因子:Hash表裡實際容納對象的比率,75%最合適

6. “鍵-值”對的典範——Hashtable類

在Java的“鍵-值”對型集合類裡,已經封裝了用散列函數最佳化其中資料搜尋效率以及處理Hash表裡資料衝突的實現細節。其中Hashtable是 “鍵-值”對型集合類的典範。

µ   構造方法

ü    Hashtable()

ü    Hashtable(int initialCapacity)

ü    Hashtable(int initialCapacity, floatloadFactor)

ü    Hashtable(<K,V> t)

µ   其它方法

ü    V put(K key, V value):向Hashtable對象中插入“鍵-值”對

ü    V get(Object key):根據key這個“鍵”從Hashtable對象中檢索到 對應的“值”

例如,ht.put(new Integer(1),new String(“Tom”));

          Stringstr=ht.get(new Integer(1));

ü    boolean containsKey(Object key)
判斷“鍵”是否存在於Hashtable對象中。

ü    boolean containsValue(Object value)
判斷“值” 是否存在於Hashtable中。

例如,boolean flag=ht.containsKey(new Integer(2));

           flag=ht.containsValue(“Rose”);

ü    public boolean contains(Object value) 同containsValue()方法。

ü    public void clear()
將此Hashtable清空,使其不包含任何鍵。

7.   列舉程式是一個用來訪問集合元素的工具,它不僅提供了可以用來訪問集合的若干方法,更展示瞭解決訪問對象時“物件類型不確定”難題的思路。

¯     訪問集合類的“不確定性”難題

      Java中有諸多不同類型的Java集合類(比如Vector或List),程式員希望用同一類型的方式來訪問其中的資料。

¯     列舉程式介面

     java.util.Iterator(列舉程式介面)封裝“無差別訪問集合對象”的方法。

8. 相關方法

ü    在每一個集合類(比如Vector或Hashtable等)裡,都有一個iterator()方法,各集合對象可以通過該方法把遍曆本類的控制權交給Iterator介面。

ü    在Iterator的介面裡,提供了boolean hasNext()方法,判斷出是否可以通過列舉程式來得到集合對象中的下一個元素。

ü    在Iterator的介面裡,提供了E next()方法,用來擷取集合對象裡的下一個元素,它返回的是一個泛型對象。

9.列舉程式“分離”思想

µ   “遍曆不同種類的集合對象” 採用“分離”的設計思想;

µ   把遍曆這個業務動作同將要實施遍曆操作的對象(比如集合)分離,在這個基礎上,抽象出遍曆不同集合對象的共性代碼,並把這些功能代碼封裝到列舉程式這個介面裡,就可以用同一套代碼,來遍曆不同類型的集合;

µ   正是由於列舉程式分離了業務動作(枚舉)和業務動作要操作的資料(集合),所以它才能以不變應萬變。

10.倒包時,用具體類或*是一樣的,不影響運行速率。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.