很多非泛型集合類都有對應的泛型集合類,下面是常用的非泛型集合類以及對應的泛型集合類:
非泛型集合類 | 泛型集合類 |
ArrayList | List<T> |
HashTable | DIctionary<T> |
Queue | Queue<T> |
Stack | Stack<T> |
SortedList | SortedList<T> |
我們用的比較多的非泛型集合類主要有 ArrayList類 和 HashTable類。我們經常用HashTable 來存儲將要寫入到數據庫或者返回的信息,在這之間要不斷的進行類型的轉化,增加了系統裝箱和拆箱的負擔,如果我們操縱的數據類型相對確定的化 用 Dictionary<TKey,TValue> 集合類來存儲數據就方便多了,例如我們需要在電子商務網站中存儲用戶的購物車信息( 商品名,對應的商品個數)時,完全可以用 Dictionary<string, int> 來存儲購物車信息,而不需要任何的類型轉化。
下面是簡單的例子,包括聲明,填充鍵值對,移除鍵值對,遍歷鍵值對
Dictionary<
string,
string> myDic =
new Dictionary<
string,
string>();
myDic.Add( " aaa ", " 111 ");
myDic.Add( " bbb ", " 222 ");
myDic.Add( " ccc ", " 333 ");
myDic.Add( " ddd ", " 444 ");
// 如果添加已經存在的鍵,add方法會拋出異常
try
{
myDic.Add( " ddd ", " ddd ");
}
catch (ArgumentException ex)
{
Console.WriteLine( " 此鍵已經存在: " + ex.Message);
}
// 解決add()異常的方法是用ContainsKey()方法來判斷鍵是否存在
if (!myDic.ContainsKey( " ddd "))
{
myDic.Add( " ddd ", " ddd ");
}
else
{
Console.WriteLine( " 此鍵已經存在: ");
}
// 而使用索引器來負值時,如果建已經存在,就會修改已有的鍵的鍵值,而不會拋出異常
myDic [ " ddd "]= " ddd ";
myDic[ " eee "] = " 555 ";
// 使用索引器來取值時,如果鍵不存在就會引發異常
try
{
Console.WriteLine( " 不存在的鍵 "" fff "" 的鍵值為: " + myDic[ " fff "]);
}
catch (KeyNotFoundException ex)
{
Console.WriteLine( " 沒有找到鍵引發異常: " + ex.Message);
}
// 解決上面的異常的方法是使用ContarnsKey() 來判斷時候存在鍵,如果經常要取健值得化最好用 TryGetValue方法來獲取集合中的對應鍵值
string value = "";
if (myDic.TryGetValue( " fff ", out value))
{
Console.WriteLine( " 不存在的鍵 "" fff "" 的鍵值為: " + value );
}
else
{
Console.WriteLine( " 沒有找到對應鍵的鍵值 ");
}
// 下面用foreach 來遍歷鍵值對
// 泛型結構體 用來存儲健值對
foreach (KeyValuePair< string, string> kvp in myDic)
{
Console.WriteLine( " key={0},value={1} ", kvp.Key, kvp.Value);
}
// 獲取值得集合
foreach ( string s in myDic.Values)
{
Console.WriteLine( " value={0} ", s);
}
// 獲取值得另一種方式
Dictionary< string, string>.ValueCollection values = myDic.Values;
foreach ( string s in values)
{
Console.WriteLine( " value={0} ", s);
}
myDic.Add( " aaa ", " 111 ");
myDic.Add( " bbb ", " 222 ");
myDic.Add( " ccc ", " 333 ");
myDic.Add( " ddd ", " 444 ");
// 如果添加已經存在的鍵,add方法會拋出異常
try
{
myDic.Add( " ddd ", " ddd ");
}
catch (ArgumentException ex)
{
Console.WriteLine( " 此鍵已經存在: " + ex.Message);
}
// 解決add()異常的方法是用ContainsKey()方法來判斷鍵是否存在
if (!myDic.ContainsKey( " ddd "))
{
myDic.Add( " ddd ", " ddd ");
}
else
{
Console.WriteLine( " 此鍵已經存在: ");
}
// 而使用索引器來負值時,如果建已經存在,就會修改已有的鍵的鍵值,而不會拋出異常
myDic [ " ddd "]= " ddd ";
myDic[ " eee "] = " 555 ";
// 使用索引器來取值時,如果鍵不存在就會引發異常
try
{
Console.WriteLine( " 不存在的鍵 "" fff "" 的鍵值為: " + myDic[ " fff "]);
}
catch (KeyNotFoundException ex)
{
Console.WriteLine( " 沒有找到鍵引發異常: " + ex.Message);
}
// 解決上面的異常的方法是使用ContarnsKey() 來判斷時候存在鍵,如果經常要取健值得化最好用 TryGetValue方法來獲取集合中的對應鍵值
string value = "";
if (myDic.TryGetValue( " fff ", out value))
{
Console.WriteLine( " 不存在的鍵 "" fff "" 的鍵值為: " + value );
}
else
{
Console.WriteLine( " 沒有找到對應鍵的鍵值 ");
}
// 下面用foreach 來遍歷鍵值對
// 泛型結構體 用來存儲健值對
foreach (KeyValuePair< string, string> kvp in myDic)
{
Console.WriteLine( " key={0},value={1} ", kvp.Key, kvp.Value);
}
// 獲取值得集合
foreach ( string s in myDic.Values)
{
Console.WriteLine( " value={0} ", s);
}
// 獲取值得另一種方式
Dictionary< string, string>.ValueCollection values = myDic.Values;
foreach ( string s in values)
{
Console.WriteLine( " value={0} ", s);
}