《數據結構與抽象:Java語言描述(原書第4版)》一2.1.6 實現更多的方法
本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第2章 ,第2.1.6節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學 新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。
2.1.6 實現更多的方法
既然可以向包中添加對象,那麼就可以實現其餘的方法,從最簡單的開始。直到我們明白如何查找一個包時再來定義remove方法。
方法isEmpty和getCurrentSize。方法isEmpty和getCurrentSize的定義很簡單,正如你所見的:
安全說明:方法應該何時調用checkInitialization?
方法isEmpty和getCurrentSize沒有調用checkInitialization。雖然它們能調用,但我們不想因不必要的安全檢查而使客戶的性能降低。兩個方法都涉及數據域numberOfEntries。即使構造方法沒有完成它的初始化,也沒有將這個域設置為0,但Java使用默認值將它初始化為0。所以,任何已進行部分初始化的包都是空的。對於ArrayBag,訪問數組bag的方法都應該確保它已存在。
注:有些方法的定義非常簡單,幾乎與類的早期版本中用來定義它們的存根是一樣的。方法isEmpty和getCurrentSize就是這樣一種情況。雖然這兩個方法不在第一組核心方法中,但它們本來可以在,即我們可以更早地定義它們,而不是為它們寫存根。
方法getFrequencyOf。為計數給定對象在包中出現的次數,我們計數對象在數組bag中出現的次數。使用for循環,下標從0到numberOfEntries-1,將給定對象與數組中的每個對象進行比較。當發現相等時,計數器加1。循環結束時,隻要返回計數器的值就可以了。注意,比較對象時必須使用方法equals,而不是使用相等操作符==,即必須寫語句
假定在對象所屬的類中定義了自己的equals方法。
這個方法定義如下。
方法contains。要查看包中是否含有給定的對象,可以再次查找數組bag。這裏需要的循環類似於方法getFrequencyOf中使用的,但是一旦發現要尋找項的第一次出現,循環就應該立刻停止。描述這個邏輯的偽代碼如下:
在兩個條件下,這個循環會終止:已經在數組中找到anEntry或者已經查找了整個數組但沒成功。
然後定義方法contains。
注:兩種循環
為計數數組中項出現的次數,方法getFrequencyOf使用一個循環來訪問數組的所有項。事實上,循環體執行了numberOfEntries次。相反,為表示一個給定項是否出現在一個數組中,方法contains中的循環一旦找到要尋找的項就立即結束。這個循環的循環體執行的次數為1~numberOfEntries。你應該能輕鬆地寫出執行固定次數或可變次數的循環。
自測題9 方法contains可以調用getFrequencyOf而不是執行一個循環,即你可以像下麵這樣定義方法:
這個定義與前一段中給出的定義相比,優缺點各是什麼?
測試其他的方法。在為類ArrayBag定義其他方法的同時,應該測試它們。本書的在線網站提供的程序ArrayBagDemo2僅關注這些額外的方法。不過,你應該逐步形成一個測試程序,以便它能測試到目前為止你已經定義的所有方法。類ArrayBag到目前為止的版本,可在在線網站上名為ArrayBag2的源代碼中找到。
最後更新:2017-06-26 17:32:18