集合介面和型別

2021-04-24 01:54:17 字數 3184 閱讀 6793

在.net 2.0之前,不存在泛型。現在泛型集合類通常是集合的首選型別。泛型集合類是型別安全的,如果使用值型別,是不需要裝箱操作的。如果要在集合中新增不同型別的物件,且這些物件不是相互派生的,例如在集合中新增int和string物件,就只需基於物件的集合類。另一組集合類是專用於特定型別的集合,例如stringcollection類專用於string型別。

對集合非常重要的介面及其方法和屬性如表:

接    口

方法和屬性

說    明

ienumerable,

ienumerable

getenumerator()

如果將foreach語句用於集合,就需要介面ienumerable。這個介面定義了方法getenumerator(),它返回乙個實現了ienumerator的列舉。泛型介面ienumerable繼承了非泛型介面ienumerable,定義了乙個返回enumerable的getenumerator方法。因為這兩個介面具有繼承關係,所以對於每個需要ienumerable型別引數的方法,都可以傳送enumerable物件

icollection

count,

issynchronized,

syncroot,

copyto()

介面icollection由集合類實現。使用這個介面的方法可以在集合中新增和刪除元素

icollection

count,isreadonly,

add(),clear(),

contains(),copyto()

remove()

介面icollection擴充套件了介面ienumerable的功能

ilist

isfixedsize,

isreadonly,

item,add,clear,

contains,indexof,

insert,remove,

removeat

介面ilist派生於介面icollection。ilist允許使用索引器訪問集合,還可以在集合的任意位置插入或刪除元素

ilist

item,indexof

insert,remove

與介面icollection類似,介面ilist也繼承了介面icollection。

array類實現了這個介面,但新增或刪除元素的方法會丟擲notsupportedexception異常。在大小固定的唯讀集合(如array類)中,這個介面定義的一些方法會丟擲notsupportedexceptiuon異常

idictionary

isfixedsize,

isreadonly,item,

keys,values,add(),clear(),contains(),

getenumerator(),

remove()

介面idictionary或idictionary由其元素包含鍵和值的集合實現

idictionary

item,keys,values,add(),

containskey (),

remove(),

tyrgetvalue()

icomparer

compare()

介面icomparer由比較器實現,通過compare()方法給集合中的元素排序

iequalitycomparer

equals(),

gethashcode()

介面iequalitycomparer由乙個比較器實現,該比較器可用於字典中的鍵。使用這個介面,可以對物件進行相等比較。方法gethashcode()應為每個物件返回乙個唯一值。如果物件相等,equals()方法就返回true,否則返回false

system.collections.ilist介面的物件,根據這一定義,我將在system.collections名域空間範圍內的「內建」的集合分為三類:

有序集合:只實現icollection介面的集合,事實上的插入的順序決定了物件從集合中被檢索到的順序,system.collections.stack類和system.collections.queue是兩個icollection集合的例子。

索引集合:實現了ilist介面的集合,他們的內容可以通過乙個以零為基準的數字索引中檢索到,就像陣列一樣。system.collections.arraylist物件是索引集合的乙個例子。

鍵值集合:實現了idictionary介面的集合,包含了可以按照某些關聯鍵值檢索到的專案,idictionary的內容通常以鍵值為基礎按照某些形式進行排序,在檢索時,這些內容可以按照排好序的列舉表示。system.collections.hashtable類實現了idictionary的介面。

正如你所看到的,乙個給定集合的功能是由專門的介面或它所實現的介面控制的,如果你對物件導向程式設計沒有大量的接觸,這一點看上去即使不是毫無意義,也會讓人非常困惑。然而,你應當知道,以這種方式建立乙個物件的功能,不僅給與了相似的物件一系列相似的方法簽名,而且還允許在必要的時候將這些物件當作本質上相同的類來對待,這就是在物件導向程式設計中所說的多型性。

system.collections的「導遊」指南

在system.collections名域空間中包括了6個內建的普通集合,你可以在程式中使用它們,另外有少許特殊的集合可以在system.collections.specialized中找到,你會發現在某些場合中它們非常有用。在少數例外的情況下,每乙個特殊的集合與乙個內建的集合擁有相似的功能,讓我們先來看一下這些內建的集合和一些不太深奧的特殊集合。

堆疊與佇列

system.collections.stack和system.collections.queue類是只實現了icollection介面的類,它們將system.object型別的專案按照加入的順序排列到集合中,集合中的物件只能按照以下的順序獲取到:堆疊是後進先出,而佇列是先進先出,通常,你會在以下情況中考慮使用這些集合:

專案的接收和處理順序很重要時;

你可以在處理乙個專案之後刪除它;

你不需要在集合中訪問任意專案;

陣列表system.collections.arraylist類是只實現了ilist介面的類,陣列與集合的混合體是對它最好的描述,陣列表將專案按照加入的順序排列,每個專案被分配乙個索引識別符號,依據相關的索引號可以按照任意順序檢索,陣列表會因專案的增加而變大,這使它比一般的陣列更靈活,然而,所有可被轉化為system.object的專案均可被陣列表接受,因而它比傳統陣列的系統開銷要大很多,而且它也不是強型別(strongly typed)。

C 集合篇之 集合介面和型別

概述 list 是與陣列相當的集合類。其他型別的集合 佇列 棧 鍊錶 字典和集。它們提供的訪問集合元素的api 可能稍有區別,在記憶體中儲存元素的內部結構也有區別。集合介面和型別 大多數集合都可在system.collections和system.collections.generic命名空間下找到...

C ArrayList 和 List 集合型別

arraylist 或 list 物件是較為複雜的陣列。arraylist類和list泛型類提供多數 system.collections 類都提供的但 array 類未提供的一些功能。例如 另一方面,array提供了arraylist和list所缺少的某些靈活性。例如 需要陣列的大多數情況都可以改...

Set集合介面

set介面 set集合就像是乙個罐子,一旦把物件 丟進去 多個物件之間就沒有順序,set元素不可以重複 set判斷兩個物件是否相同不是使用 而是使用equals set t new hashset t.add aa t.add new string aa system.out.println t.a...