Java大課堂:常用資料結構一

來源:互聯網
上載者:User

標籤:java   資料結構   電腦科學   

Java大課堂:常用資料結構一背景在電腦科學的學習中,資料結構是個繞不開的問題。那麼我將在接下來的時間,簡明扼要的介紹常見資料結構以及部分源碼。下面我將簡單介紹本大課堂涉及到的內容。

眾所周知,一款好用的資料結構,不僅包括資料結構的實現,還有相關工具集。比如c++中stl有大量的工具函數,比如sort,accumulate,reduce,for_each,remove_if,count,count_if。其實在java中也有類似的實用演算法。下面我將介紹常用的資料結構以及工具集合。


Collection架構

 

Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)。一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子介面”如List和Set。

所有實現Collection介面的類都必須提供兩個標準的建構函式:無參數的建構函式用於建立一個空的Collection,有一個Collection參數的建構函式用於建立一個新的Collection,這個新的Collection與傳入的Collection有相同的元素。後一個建構函式允許使用者複製一個Collection。

List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。使用者能夠使用索引(元素在List中的位置,類似於數組下標)來訪問List中的元素,這類似於Java的數組。

和下面要提到的Set不同,List允許有相同的元素。

除了具有Collection介面必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator介面,和標準的Iterator介面相比,ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素,還能向前或向後遍曆。

實現List介面的常用類有LinkedList,ArrayList,Vector和Stack。

Set是一種不包含重複的元素的Collection,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素。

很明顯,Set的建構函式有一個約束條件,傳入的Collection參數不能包含重複的元素。

請注意:必須小心操作可變對象(Mutable Object)。如果一個Set中的可變元素改變了自身狀態導致Object.equals(Object)=true將導致一些問題。

 

 

Map架構

 Map也是介面,但沒有繼承Collection介面。該介面描述了從不重複的鍵到值的映射。Map介面用於維護鍵/值對(key/value pairs)。

   特徵:它描述了從不重複的鍵到值的映射。

       兩個重要的實作類別:HashMap和TreeMap

       1.HashMap,中文叫散列表,基於雜湊表實現,特點就是鍵值對的映射關係。一個key對應一個Value。HashMap中元素的排列順序是不固定的。更加適合於對元素進行插入、刪除和定位。

       2.TreeMap,基於紅黑樹實現。TreeMap中的元素保持著某種固定的順序。更加適合於對元素的順序遍曆

迭代器

迭代器是一種設計模式,它是一個對象,它可以遍曆並選擇序列中的對象,而開發人員不需要瞭解該序列的底層結構。迭代器通常被稱為“輕量級”對象,因為建立它的代價小。

Collections工具類

java.util.Collections 是一個封裝類(工具類/協助類)。它包含有各種有關集合操作的靜態多態方法。此類不能執行個體化,就像一個工具類,用於對集合中元素進行排序、搜尋以及安全執行緒等各種操作,服務於Java的Collection架構。

它類似於stl中的sort,remove等。

 

比較子

java的比較子有兩類,分別是Comparable介面和Comparator介面。

在為對象數組進行排序時,比較子的作用非常明顯。

區別是Comparable被比較對象本身implements,添加方法。這個類似於c++類內部重載操作符’<’

Comparator需要實現一個比較類。這個類似於c++類外部實現比較函數或者仿函數。


總結

我們在學習使用java的類庫時,不僅僅要學會使用,還要知其所以然。另一方面要有開闊的眼界,寫出好看的代碼。比如,排序,用系統提供的介面,而不是自己實現。盡量使用lambda代替匿名內部類等。接下來第二講將是Collection架構中的List介面。


Java大課堂:常用資料結構一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.