《Java編程思想》(第二版)第09章:持有你的對象

來源:互聯網
上載者:User
編程|對象
這是個十分簡單的計劃:一群固定數量且壽命已知的對象(objects).


 


你必須有能力在任何時刻,任何地點產生任意個數的對象。為此,Java提供了對象(或者應該說是對象的reference)的數種持有方式。有內建的array,還有utilities中的一套完整的容器類或者稱為叢集類(collection classes)。


 


Array和其他容器的區別:效率和型別。

如果可以的話你應該儘可能使用array。當然有時候他功能有限,所以需要其他容器。

Java array以及其他容器都會因為邊界檢查而帶來額外的效率負擔。

其他容器將持有對象一律視為Object型別。

基本型別(primitive types)不能直接放到普通容器中?


 


Array的各種初始化動作:


 


Java的引用機制使得返回一個array非常簡單。

Arrays class擁有一組static函數,能夠執行許多array公用函數:equals(),fill(),sort(),binarySearch()


 


當你不知道究竟需要多少對象時,你需要更複雜的方法來持有他們。Java提供一套容器類庫用以解決這個問題。基本類型包括:List,Set,Map可以用他們來解決極多問題。

他們可以置入任意個數的對象,撰寫應用程式的時候不需要擔心容量問題:

他們基本上可以分成兩個基本類別:collection,map。


 


容器的缺點:元素型別未定

這是因為Java容器是為object作為其元素類型的。往壞的方面說,這種設計存在一些問題能:1.你打算設計一些只能儲存貓的容器,但是使用者卻可以把狗存進去。2.拿出來的時候不知道它到底是貓還是狗,需要向下轉型downcasting.

還是讓我們往好的方面想吧:Java並不止於讓你無用容器內的對象。我們還有執行期異常(runtime exception),娃哈哈。

Tips:JDK1.4已採用”Generic Java”技術,成了名副其實的”泛型Java”。允許程式員在運用Java容器的時候,指定元素型別.文法非常接近C++,唯底層實現技術”完全不同”.


 


迭代器(Iterators)

一切都是為了代碼重用,如果沒有迭代器,我們可能在修改容器的時候可能要修改很多遍曆的代碼。有了Iterators對象,我們就可以重用了。

它的職責是走訪以及選擇序列(sequence)中的一連串對象。而用戶端程式員不需要知道或在意該序列的底層究竟如何?。他們是”lightware”對象:產生的代價很小。基於這個理由,你常會發現他有一些看似奇怪的限制,例如某些迭代器只能單向移動。


 


暈倒,太多了,用倒的時候再來看吧。J


 



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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