容器深入研究,調查研究不夠深入

來源:互聯網
上載者:User

容器深入研究,調查研究不夠深入

通常的:

映射表(也稱關聯陣列)的基本思想是它維護的鍵-值(對)關聯,因此你可以使用鍵來尋找值。

標準的Java類庫中包含了Map的幾種實現,包括:HashMap,TreeMap,LinkedHashMap,WeakHashMap,ConcurrentHashMap,IdentityHashMap。

它們都有同樣的基本介面Map,但是行為特性各不相同,這表現在效率、鍵值對的儲存及呈現次序、對象的儲存周期、映射表如何在多線程程式中工作的判定“鍵”等價的策略方面。Map介面實現的數量應該讓你感覺到這種工具的重要性。

你可以獲的對Map更深入的理解,這有助於觀察關聯陣列是如何建立的。下面是一個極其簡單的實現。

class AssociativeArray<K,V> {private Object[][] pairs;private int index;public AssociativeArray(int length) {pairs = new Object[length][2];}public void put(K key, V value) {if (index >= pairs.length) {throw new ArrayIndexOutOfBoundsException();}pairs[index++] = new Object[]{key, value};}public V get(K key) {for (int i = 0; i < index; i ++) {if (key.equals(pairs[i][0])) {return (V) pairs[i][1];}}return null;}@Overridepublic String toString() {StringBuffer result = new StringBuffer();for (int i = 0; i < index; i++) {result.append(pairs[i][0].toString());result.append(":");result.append(pairs[i][1].toString());if (i < index - 1) {result.append("\n");}}return result.toString();}}

上面的本版是簡單性的、缺乏效率性的,並且由於具有固定的尺寸顯得夠不靈活。

效能:

效能是映射表中的一個重要問題,當在get()中使用線性搜尋時,執行速度回相當的慢,而這正是HashMap提高速度的地方。

HashMap使用了特殊的值,稱作散列碼,來取代對鍵的緩慢搜尋。散列碼是“相對唯一”的、用以代表對象的int值,它是通過將該對象的某些資訊進行轉換搜尋而成的。

hashCode()是根類Object中的方法,因此所有Java對象都能產生散列碼,HashMap就是使用對象的hashCode()進行快速查詢的,此方法可以顯著的提高效能

下面是基本的Map實現。在HashMap上打星號表示如果沒有其他的限制,它就應該成為你的預設選擇,因為它對速度進行了最佳化。其他的都強調其他的特性,因此都不如HashMap快。

HashMap:

Map基於散列表的實現(它取代了HashTable)。插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設定容量和負載因子,以調整容器的效能

LinkedHashMap:

類似於HashMap,但是迭代遍曆時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點;而在迭代訪問時反映更快,因為它使用的鏈表維護內部次序

TreeMap:

基於紅/黑樹狀結構的實現。查看“鍵”或“鍵值對”時,它們會被排序(次序由Comparable或者Comparator決定)。TreeMap特點在於,所得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。

WeakHashMap:

弱鍵(weak key)映射,允許釋放映射所指向的對象;這是為解決某類特殊問題而設計的。如果映射之外沒有引用指向某個“鍵”,則此“鍵”可以被記憶體回收行程回收。

ConcurrentHashMap:

一種安全執行緒的Map,它不涉及同步加鎖。

IdentityHashMap:

使用==代替equals()對“鍵”進行比較的散列映射。專為解決特殊問題設計的。

 散列是映射中儲存元素的最常用的方式。

對Map中使用的鍵的要求與對Set中的元素的要求一樣。任何鍵都必須有一個equals()方法;如果鍵被用於散列Map,那麼它必須還具有恰當的hashCode()方法;如果鍵被用於TreeMap它必須實現Comparable。


SortedMap:

用SortedMap(TreeMap時期現階段的唯一實現),可以確保鍵處於排序狀態。這使得它具有額外的功能,這些功能是由SortedMap介面中的下列方法提供給的:

 Comparator<? superK> comparator()
          返回對此映射中的鍵進行排序的比較子;如果此映射使用鍵的自然順序,則返回null。
 Set<Map.Entry<K,V>> entrySet()
          返回在此映射中包含的映射關係的 Set 視圖。
 K firstKey()
          返回此映射中當前第一個(最低)鍵。
 SortedMap<K,V> headMap(K toKey)
          返回此映射的部分視圖,其鍵值嚴格小於 toKey。
 Set<K> keySet()
          返回在此映射中所包含鍵的 Set 視圖。
 K lastKey()
          返回映射中當前最後一個(最高)鍵。
 SortedMap<K,V> subMap(K fromKey,K toKey)
          返回此映射的部分視圖,其鍵值的範圍從 fromKey(包括)到 toKey(不包括)。
 SortedMap<K,V> tailMap(K fromKey)
          返回此映射的部分視圖,其鍵大於等於 fromKey。
 Collection<V> values()
          返回在此映射中所包含值的 Collection 視圖。

LindedHashMap:

為了提高速度,LinkedHashMap散列化所有的元素,但是在遍曆鍵值對時,卻又以元素的插入順序返回鍵值對(System.out.println())。

此外,可以在構造器中設定LinkedHashMap,使之採用基於訪問最近最少使用(LRU)演算法,於是沒有訪問過的(可被看做需要刪除的)元素就會出現在隊列的掐面,對於需要定期清理元素以節省空間的程式來說,此功能是很容易實現的。


誰可以推薦一個學零基礎java較合理的一個步驟,需要買一本什樣的書

我給你的建議是:
1:先學習學習C語言,當然這和你成為一個java有著必然的聯絡,因為只有學習了C語言你才能知道底層的東西,比如B+樹,Map,鏈表,指標,遞迴等一些最基本的東西
2:如果你不想學習C語言那也可以,但是你不會成為特別厲害的高手,你只會局限於初級或者初級中級之間,建議學習一下譚浩強的C語言就可以了
3:學習Java,建議剛開始不要看物件導向思想,核心代碼之類的書籍,最開始找上一本入門的書籍確保上面的東西你都能看懂,並且都能完全理解,並且你可以開始鄙視作者的編碼規範以及很垃圾的代碼,這個時候你可以學習一下《物件導向思想》《java核心技術》
4:學習完上述幾本書之後,你可以看看《重構》《Java編碼藝術》《effictive Java》,這些書籍能讓你對你的物件導向思想帶來不小的進步
5:之後你可以看看《設計模式》,完全理解設計模式所包含的思想,對設計模式運用自如,到這個地步java對你來說就已經不是很難了,你就可以嘗試去看啊JDK核心代碼了
6:看看《Spring in action》學會面向方面編程,然後看看Spring核心原始碼
7:相信到這一步LZ已經是少見的高手了
8:如果你還對J2ee感興趣的話,你可以從Servlet開始,struts,jsf,jsp,webwork,ibatis,hibernate,有了前面的基礎這些技術你在半年之內都可以掌握了
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.