ArrayList詳解(1)

     通常 程序運行總是根據運行時才知道的條件創建新對象,不到運行時,不會知道所需要對象的數量,甚至不知道確切的類型,爲解決這個普遍的編程問題,需要能夠在任意的時刻和任意的位置穿件任意數量的對象,所以不能根據依靠創建命名的引用來持有每一個對象,MyObject object ;

因爲你不知道實際上會需要多少個這樣的引用,

大多數的語言都會提供某種方法來解決這個問題,Java有多種方式保存對象(準確來說應該是對象的引用),例如前面學習的數組,他是語言內置的類型,Java 類庫還提供了一套相當完整的容器類(也稱爲集合類)來保存與操控對象。

數組與其他的種類的容器之間的區別有三個方面:效率,類型和保存基本類型的能力,在Java中,數組是一種效率最高的存儲和隨機訪問對象序列的方式,數組就是一個簡單的線性序列,這使得元素的訪問非常的快,但是也損失了一些其他的特徵,當創建了一個數組對象(將數組本身看作對象對待),數組的大小就固定了,並且這個數組的生命週期也是不可改變的,通常是創建一個特定大小的數組,在空間不足的時候在創建一個新的數組,然後再把原來舊的數組的的引用複製移動到新的數組中,然而這種彈性的帶來的開銷是的ArrayList的效率遠遠低於數組。

在C++中,容器類vector的卻知道自己保存的對象是何類型,不過Java的數組比較,它還有一個缺點,C++的vector的操作符不作邊界檢查,所以可能會越界操作,而在Java中只要使用的是容器類,都將會做邊界的檢查,如果越界將會得到一個RuntimeException異常。

其他的容器類List,Map,Set 通用的容器類,他們不以具體的類型來處理對象,換句話說他們將所有的對象都是按照Object類型處理,即Java類中所有類的基類,從某個角度上來說,這種方式很好:你只需構建一個容器類,任意的Java對象都可以放入其中,除開基本可以放入容器類作爲使用Java基本包裝起類的常量,當你創建一個數組的時候,它只能保存特定的類型(數組可以保存基本的數據類型,而容器類卻不能),這意味着會在編譯時做類型檢查,以防將錯誤的類型插入數組,或取出數據時弄錯類型,當然,無論在編譯時還是運行時,Java都會阻止你向對象發送不恰當的消息,所以並不是說哪種方法更不安全,只是如果編譯時就能夠指出錯誤,那麼程序可以運行得更快。

考慮到效率與類型的檢查,應該儘可能的使用數組,然而如果要解決一些一般化的問題,數組就可以受到更多的限制,

無論使用的是哪種類型的數組,數組標識符其實只是一個引用,只想在堆中創建的一個真實對象,這個(數組)對象用以保存指向其他對象的引用,可以作爲數組,初始化隱式的創建此對象,或者用new 來表達顯示的創建。只讀成員length是數組對象的一部分(事實上這是唯一的一個可以訪問的字段或者方法)表示此數組可以存儲多少個元素

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