C#集合
集合Collection类,它是专用于数据存储和检索的类。
提供了对 stack(栈)、queue(队列)、list(列表)、hash table(哈希表)的支持
集合类都在命名空间System.Collection中
各个集合类:
1.ArrayList
它代表了可被单独索引的对象的有序集合。
可以替代数组,与数组不同的是,可以使用索引在指定的位置添加和移除项目,它是一个动态数组,会自动去调整它的大小。也可以在列表中进行动态内存增加、搜索、排序各项。
- ArrayList常用的属性:
Capacity:获取或设置ArrayList可以包含的元素个数
Count:获取ArrayList中实际包含的元素个数
IsFixedSize:获取一个值,表示ArrayList是否具有固定大小
IsReadOnly:获取一个值,表示ArrayList是否只读
Item:获取或设置指定索引处的元素 - ArrayList常用方法:
public virtual int Add(object value); 在ArrayList的末尾添加一个对象
public virtual void AddRange(ICollection c); 在ArrayList的末尾添加ICollection元素
public virtual void Clear(); 从ArrayList中移除所有的元素
public virtual bool Contains(object item); 判断某个元素是否在ArrayList中
public virtual ArrayList GetRange(int index,int count); 返回一个ArrayList,表示源ArrayList中元素的子集
public virtual int IndexOf(object); 返回某个值在ArrayList中第一次出现的索引,索引从0开始计算
public virtual void Insert(int index,object value); 在ArrayList的指定索引处,插入一个元素
public virtual void InsertRange(int index,ICollection c); 在ArrayList的指定索引处,插入某个集合的元素
public virtual void Remove(object obj); 从ArrayList中移除第一次出现的指定对象
public virtual void RemoveAt(int index); 移除ArrayList的指定索引处的元素
public virtual void RemoveRange(int index,int count); 从ArrayList中移除某个范围的元素
public virtual void Reverse(); 逆转ArrayList中元素的顺序
public virtual void SetRange(int index,ICollection c); 复制某个集合的元素到ArrayList中某个范围的元素上
public virtual void Sort(); 对ArrayList中元素进行排序
public virtual void TrimToSize(); 设置容量为ArrayList中元素的实际个数
使用Visual Studio新建C#控制台应用程序chapter23_001,测试ArrayList的相关用法
在生成的工程Main方法中加入如下代码:
ArrayList list = new ArrayList();
Console.WriteLine("添加元素,以q结束录入!");
string temp = "";
while ((temp = Console.ReadLine()) != "q")
{
list.Add(temp);
}
Console.WriteLine("------------ArrayList录入结果---------------");
foreach (string str in list)
{
Console.Write(str + " ");
}
Console.WriteLine();
Console.WriteLine("-------------ArrayList相关属性--------------");
Console.WriteLine("Capacity:{0}",list.Capacity);
Console.WriteLine("Count:{0}",list.Count);
Console.WriteLine("-------------ArrayList排序--------------");
list.Sort();
foreach (string str in list)
{
Console.Write(str + " ");
}
Console.WriteLine();
Console.ReadKey();
编译运行结果如下:
2.Hashtable
Hashtable代表了一系列基于键的哈希代码组织起来的键值对,它使用键来访问集合中对应的元素。
- Hashtable常用属性:
Count:获取Hashtable中包含的键值对个数
IsFixedSize:获取一个值,表示Hashtable是否具有固定大小
IsReadOnly:获取一个值,表示Hashtable是否只读
Item:获取或设置与指定的键相关的值
Keys:获取一个ICollection,包含Hashtable中的键
Values:获取一个ICollection,包含Hashtable中的值 - Hashtable常用方法:
public virtual void Add(object key,object value); 向Hashtable中添加一个带有指定键和值的元素
public virtual void Clear(); 从Hashtable中移除所有元素
public virtual bool ContainsKey(object key); 判断Hashtable是否包含指定的键
public virtual bool ContainsValue(object value); 判断Hashtable是否包含指定的值
public virtual void Remove(object key); 从Hashtable中移除带有指定键的元素
使用Visual Studio新建c#控制台应用程序chapter23_002
在生成的工程Main方法中加入如下代码进行测试:
Hashtable ht = new Hashtable();
string value;
ArrayList listKey = new ArrayList();
listKey.Add("ID");
listKey.Add("name");
listKey.Add("school");
listKey.Add("addr");
//Console.WriteLine("录入相关值信息:");
int count = 1;
while (true)
{
Console.WriteLine("录入n表示继续,q表示退出");
string flag = Console.ReadLine();
if (flag == "n")
{
for (int i = 0; i < listKey.Count; i++)
{
Console.Write("请输入" + listKey[i] + ":");
ht.Add(listKey[i] + "_" + count.ToString(), Console.ReadLine());
}
count++;
}
if (flag == "q")
{
break;
}
if (flag != "q" && flag != "n")
{
continue;
}
}
//读取Hashtable中的数据
ICollection key = ht.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + ht[k]);
}
Console.ReadKey();
编译运行后的结果如下:
3.SortedList
SortedList类代表了一系列按照键来排序的键值对,这些键值对通过键和索引来进行访问
排序列表是数数组和哈希表的组合,它包含一个可以用键或索引访问各项的列表。如果使用索引访问各项则它就是一个动态数组ArrayList,如果使用键访问各项,则它是一个哈希表Hashtable.
- SortedList常用属性:
Capacity:获取或设置SortedList的容量
Count:获取SortedList中的元素个数
IsFixedSize:获取一个值,表示SortedList是否具有固定大小
IsReadOnly:获取一个值,表示SortedList是否只读
Item:获取或调置SortedList中指定的键相关的值
Keys:获取SortedList中的键
Values:获取SortedList中的值 - SortedList常用方法:
public virtual void Add(object key,object value); 向SortedList添加一个带有指定的键和值的元素
public virtual void clear(); 从SortedList中移除所有元素
public virtual bool ContainsKey(object key); 判断SortedList是否包含指定的键
public virtual object GetByIndex(int index); 获取SortedList的指定索引处的值
public virtual object GetKey(int index); 获取SortedList的指定索引处的键
public virtual IList GetKeyList(); 获取SortedList中的键
public virtual IList GetValueList(); 获取SortedList中的值
public virtual int IndexOfKey(object key); 返回SortedList中指定键的索引,索引从0开始计算
public virtual int IndexOfValue(object value); 返回SortedList中的指定值第一次出现的索引,索引从0开始
public virtual void Remove(object key); 从SortedList中移除带有指定键的元素
public virtual void RemoveAt(int index); 移除SortedList的指定索引处的元素
public virtual void TrimToSize(); 设置容量为SortedList中元素的实际个数
使用Visual studio新建C#控制台应用程序 chapter23_003
在Main方法中加入哪下代码进行测试(相比如chapter23_002只是从Hashtable转为SortedList)
SortedList sl = new SortedList();
string value;
ArrayList listKey = new ArrayList();
listKey.Add("ID");
listKey.Add("name");
listKey.Add("school");
listKey.Add("addr");
//Console.WriteLine("录入相关值信息:");
int count = 1;
while (true)
{
Console.WriteLine("录入n表示继续,q表示退出");
string flag = Console.ReadLine();
if (flag == "n")
{
for (int i = 0; i < listKey.Count; i++)
{
Console.Write("请输入" + listKey[i] + ":");
sl.Add(listKey[i] + "_" + count.ToString(), Console.ReadLine());
}
count++;
}
if (flag == "q")
{
break;
}
if (flag != "q" && flag != "n")
{
continue;
}
}
//读取Hashtable中的数据
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
}
Console.ReadKey();
编译运行结果如下:
4.Stack
堆栈Stack代表了一个后进先出的对象集合。
就像一个管子只从一头进出元素,添加一个元素时称为推入,移除一个元素时称为弹出,从一头进出则只能是后进先出。
- Stack的常用属性:
Count:获取Stack中包含的元素个数 - Stack的常用方法以:
public virtual void Clear(); 从Stack中移除所有元素
public virtual bool Contanins(object obj); 判断某个元素是否在Stack当中
public virtual object Peek(); 返回Stack的顶部的对象,但不移除它
public virtual object Pop(); 移除并返回Stack的顶部对象
public virtual void Push(object obj); 向Stack的顶部添加一个对象
public virtual object[] ToArray(); 复制Stack到一个新的数组中
使用Visual Studiou新建C#控制台应用程序chapter23_004
在新生成的工程Main方法中添加如下代码:
Stack st = new Stack();
//向Stack的顶部添加元素
st.Push('e');
st.Push('i');
st.Push('x');
Console.WriteLine("Stack中元素:");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("Stack当前顶部元素:{0}",st.Peek());
//移出元素
int count = st.Count;
for (int i = 0; i < count; i++)
{
Console.Write(st.Pop());
}
Console.WriteLine();
//当前Stack中元素个数
Console.WriteLine("Stack中当前元素个数:{0}",st.Count);
Console.ReadKey();
编译运行后的结果如下:
5.Queue
队列Queue,代表了一个先进先出的对象集合。当需要对各项进行先进先出的访问时,则使用队列,它就相当于一个两头空的水管,一头用来添加数据,一头用来做输出数据。当在列表中添加一项,称为入队,当从列表中移除一项时,称为出队。
- Queue常用属性:
Count:获取Queue中包含的元素个数 - Queue常用方法:
public virtual void Clear(); 从Queue中移除所有元素
public virtual bool Contains(object obj); 判断某个元素是否在Queue中
public virtual object Dequeue(); 移除并返回Queue开头的对象
public virtual void Enqueue(); 向Queue的末尾添加一个对象
public virtual object[] ToArray(); 复制Queue到一个新的数组中
public virtual void TrimToSize(); 设置容量为Queue中元素的实际个数
使用Visual Studio新建C#控制台应用程序chapter23_005
在生成的项目的Main方法中添加如下代码进行测试:
Queue q = new Queue();
q.Enqueue('x');
q.Enqueue('i');
q.Enqueue('e');
Console.WriteLine("队列信息:");
foreach (char c in q)
Console.Write(c + " ");
Console.WriteLine();
int count = q.Count;
Console.WriteLine("--------移除无素--------");
for(int i = 0; i < count; i++)
{
Console.Write(q.Dequeue());
}
Console.WriteLine();
Console.WriteLine("移除元素后,队列元素个数:{0}",q.Count);
Console.ReadKey();
编译运行结果如下:
6.BitArray
BitArray类,管理的是一个紧凑型的位值数组,使用布尔值来表示,其中true表示位开启(1),否则为false表示位关闭(0)。
- BitArray常用属性:
Count:获取BitArray中包含的元素个数
IsReadOnly:获取一个值,表示BitArray是否只读
Item:获取或设置BitArray中指定位置的的值
Length:获取或设置BitArray中的元素个数 - BitArray常用方法:
public BitArray And(BitArray value); 对当前的BitArray中的元素和指定的BitArray中的相对应的元素执行按位与操作
public bool Get(int index); 获取BitArray中指定位置的位的值
public BitArray Not(); 把当前的BitArray中的位值反转,以便设置为true的元素变为false,设置为false的元素设置为true
public BitArray Or(BitArray value); 对当前的BitArray中的元素和指定的BitArray中的相对应的元素执行按位操作
public void Set(int index,bool value); 把BitArray中指定位置设置为指定值
public void SetAll(bool value); 把BitArray中的所有位设置为指定的值
public BitArray Xor(BitArray value); 对当前的BitArray中的元素和指定的BitArray中的相对应元素执行按位异或操作