閱讀810 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《數據結構與抽象:Java語言描述(原書第4版)》一1.1 什麼是包

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,第1.1節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

1.1 什麼是包

設想一個紙袋,或反複使用的布袋,甚至一個塑料袋。當人們購物、打包午餐或者吃土豆片時會用到袋子。袋子裏裝著東西。在日常用語中,包(也稱為袋子——譯者注)是一種**容器**。但在Java中,容器(container)是一個對象,它的類派生於標準類Container。這樣的容器用在圖形程序中。在Java中,不把包(bag)看作一種容器,而是一種集合。
包與其他集合的區別是什麼呢?包僅僅是含有項,但沒有按某種方式規定項的次序,也允許有重複的項。大多數的行為可由其他類型的集合執行。當描述本章中設計的集合行為時,要謹記一點,就是我們正在通過一個實際的物理包來說明一個抽象的概念。例如,紙袋內裝著不同大小和形狀的東西,且沒有特定的次序,也不考慮它的重複性。我們的抽象包將保持無序且可能有重複的對象,但我們強調,這些對象有相同或相關的數據類型。

注:包是沒有特定次序的對象的有限集合。這些對象具有相同或相關的數據類型。包可以含有重複項。

包的行為
因為包中含有有限個對象,所以報告它含有多少個對象可能是包的行為之一:

  • 得到當前包中的項數。

一個相關的行為是檢測包是否為空:

  • 查看包是否為空。

我們應該能添加和刪除對象:

  • 將給定對象添加到包中。
  • 從包中刪除一個未指定的對象。
  • 可能的話,從包中刪除一個具體對象的一次出現。
  • 從包中刪除所有對象。

雖然你希望雜貨店的打包員不要將6個湯罐頭扔到包中的麵包和雞蛋上麵,不過添加操作並沒有標出對象在包中的位置。記住,包中的內容是無序的。另外,第一個刪除操作隻刪除它能刪除的任何對象。這個操作就像是伸手到袋子裏把東西拿出來一樣。而第二個刪除操作是在包中查找某項。如果找到它,則拿出它。如果包中有多個相等的對象都滿足你的查找條件,則刪除其中的任意一個。如果在包中找不到該對象,則不能刪除它,且要直接表示出來。最後一個刪除操作隻是清空包中的所有對象。
你買了多少個狗食罐頭?你記得拿魚醬了嗎?袋子裏有什麼?可用下列操作回答這幾個問題:

  • 統計包中某個對象的個數。
  • 測試包中是否含有某個對象。
  • 查看包中的所有對象。

現在我們有足夠的行為。此時,我們將所有的行為寫在一張紙上,或寫在
image


因為包是一個抽象數據類型,所以我們僅描述它的數據並說明它的操作。不指明如何保存數據或如何實現它的操作。例如,不要考慮數組。首先,你需要明確地知道包操作都有哪些:關注什麼操作可行,而不是它們如何做。即,在程序中能使用包之前,需要一組詳細的規格說明。事實上,甚至在你還沒確定程序設計語言前,你就應該先說明包的操作。

注:因為抽象數據類型描述了獨立於程序設計語言的數據組織方式,所以實現它時你可以對程序設計語言有所選擇。

最後更新:2017-06-26 15:32:55

  上一篇:go  阿裏雲全球首批MVP楊繡專訪 - 技術要堅持刨根問底
  下一篇:go  linux web服務器必須正確配置php-f…