容器 (數據類型)
在計算機科學中,容器是指一種類、數據結構、[1][2]或者抽象數據類型,其實例為其他類的對象。換言之,它們以一種遵循特定訪問規則的方法來存儲對象。容器的大小取決於其包含的對象(或元素)的數目。潛在的不同容器類型的實現可能在空間和時間複雜度上有所差別,這使得在給定應用場景中選擇合適的某種實現具有靈活性。
概覽
容器可以三種方式看待:
- 訪問:即訪問容器中對象的方式。
- 存儲:即存儲容器中對象的方式。
- 遍歷:即遍歷容器中對象的方式。
典型的容器實現如下的方法:
- 創建一個新的空容器(即構造函數)。
- 向容器中插入對象。
- 從容器中刪除對象。
- 刪除容器中的所有對象(即清空)。
- 訪問容器中的對象。
- 獲取容器中對象的數目(即尺寸)。
並非所有設計遵循以上要求,例如C++標準庫的std::array
不提供清空,而std::forward_list
不提供對象計數。
容器有時結合迭代器實現。
分類
按存儲類型
單值或關聯容器
- 單值容器:每個對象在容器中被獨立存儲,並且其被直接或憑藉迭代器訪問。
- 關聯容器:關聯數組、映射或者字典是由鍵值對組成的容器,因此每一個鍵在給定容器中最多出現一次。如果一個值(對象)被存儲在給定容器中,那麼鍵可以用於尋找它。
圖形容器
部件工具箱使用特殊控件(也稱作容器)去將其他控件分組(窗口、面板等)。除它們的圖形特性之外,它們有和容器類一致的表現:它們存有它們子控件的列表,並且允許對子控件進行增加、刪除或獲取等操作。
不同實現
- .NET: System.Collections (MSDN)(頁面存檔備份,存於網際網路檔案館)
- ActionScript3: AS3Commons Collections Framework
- C++: C++標準庫 (SC++L) or the obsolete 標準模板庫 (STL)
- Java: Java集合框架(JCF)
- Objective-C: Foundation Kit的部分。
- PL/SQL: 集合[6]
- Python: 內置容器 list、dict、tuple和set,可使用collections(頁面存檔備份,存於網際網路檔案館)模塊進一步拓展。
- Scala: 在
scala.collection.mutable
andscala.collection.immutable
包中的可變及不可變容器。
參見
參考資料
- ^ Paul E. Black (ed.), entry for data structure in Dictionary of Algorithms and Data Structures. US National Institute of Standards and Technology.15 December 2004. Accessed on Oct 04, 2011.
- ^ Entry data structure in the Encyclopædia Britannica (2009) Online entry (頁面存檔備份,存於網際網路檔案館) Accessed on Oct 04, 2011.
- ^ LIFO(investopedia.com). [2016-08-19]. (原始內容存檔於2016-08-24).
- ^ FIFO(investopedia.com). [2016-08-19]. (原始內容存檔於2016-08-09).
- ^ FIFO(businessdictionary.com). [2016-08-19]. (原始內容存檔於2016-08-27).
- ^ PL/SQL Collections and Records. [2013-04-20]. (原始內容存檔於2013-05-09).
外部連結
- Container Data Structure Declaration and Initialization(頁面存檔備份,存於網際網路檔案館)
- Container data structures(頁面存檔備份,存於網際網路檔案館)
- Python SortedContainers module(頁面存檔備份,存於網際網路檔案館) A fast implementation of sorted list, sorted dict, and sorted set data types in Python.