程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 數組

數組

編輯:關於JAVA

對數組的大多數必要的介紹已在第4章的最後一節進行。通過那裡的學習,大家已知道自己該如何定義及初始化一個數組。對象的容納是本章的重點,而數組只是容納對象的一種方式。但由於還有其他大量方法可容納數組,所以是哪些地方使數組顯得如此特別呢?
有兩方面的問題將數組與其他集合類型區分開來:效率和類型。對於Java來說,為保存和訪問一系列對象(實際是對象的句柄)數組,最有效的方法莫過於數組。數組實際代表一個簡單的線性序列,它使得元素的訪問速度非常快,但我們卻要為這種速度付出代價:創建一個數組對象時,它的大小是固定的,而且不可在那個數組對象的“存在時間”內發生改變。可創建特定大小的一個數組,然後假如用光了存儲空間,就再創建一個新數組,將所有句柄從舊數組移到新數組。這屬於“矢量”(Vector)類的行為,本章稍後還會詳細討論它。然而,由於為這種大小的靈活性要付出較大的代價,所以我們認為矢量的效率並沒有數組高。
C++的矢量類知道自己容納的是什麼類型的對象,但同Java的數組相比,它卻有一個明顯的缺點:C++矢量類的operator[]不能進行范圍檢查,所以很容易超出邊界(然而,它可以查詢vector有多大,而且at()方法確實能進行范圍檢查)。在Java中,無論使用的是數組還是集合,都會進行范圍檢查——若超過邊界,就會獲得一個RuntimeException(運行期違例)錯誤。正如大家在第9章會學到的那樣,這類違例指出的是一個程序員錯誤,所以不需要在代碼中檢查它。在另一方面,由於C++的vector不進行范圍檢查,所以訪問速度較快——在Java中,由於對數組和集合都要進行范圍檢查,所以對性能有一定的影響。
本章還要學習另外幾種常見的集合類:Vector(矢量)、Stack(堆棧)以及Hashtable(散列表)。這些類都涉及對對象的處理——好象它們沒有特定的類型。換言之,它們將其當作Object類型處理(Object類型是Java中所有類的“根”類)。從某個角度看,這種處理方法是非常合理的:我們僅需構建一個集合,然後任何Java對象都可以進入那個集合(除基本數據類型外——可用Java的基本類型封裝類將其作為常數置入集合,或者將其封裝到自己的類內,作為可以變化的值使用)。這再一次反映了數組優於常規集合:創建一個數組時,可令其容納一種特定的類型。這意味著可進行編譯期類型檢查,預防自己設置了錯誤的類型,或者錯誤指定了准備提取的類型。當然,在編譯期或者運行期,Java會防止我們將不當的消息發給一個對象。所以我們不必考慮自己的哪種做法更加危險,只要編譯器能及時地指出錯誤,同時在運行期間加快速度,目的也就達到了。此外,用戶很少會對一次違例事件感到非常驚訝的。
考慮到執行效率和類型檢查,應盡可能地采用數組。然而,當我們試圖解決一個更常規的問題時,數組的局限也可能顯得非常明顯。在研究過數組以後,本章剩余的部分將把重點放到Java提供的集合類身上。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved