集合的特征和类型
特征:(1)可以动态改变大小
(2)可储存任意类型的对象
(3)提供一系列操作集合中对象的方法
集合类型:
C#中的集合定义在System.Collections命名空间
列表集合ArrayList
ArrayList相当于一个动态数组,大小可以更具需要动态改变‘
ArrayList使用
ArrayList list = new ArrayList() { };
Customer te = new Customer("liu", 6);
Customer t = new Customer("qiong", 7);
list.Add(te);
list.Add(t);
for(int i=0;i<list.Count;i++)
{
Console.WriteLine((list[i] as Customer).Name);//数据类型转换 as
}
ArrayList把所有储存的元素都当作对象引用对象,所有可以储存任何对象,在访问时,需要将数据类型转换回储存前的类型
ArrayList的常用属性
属性 | 功能说明 |
Capacity | 获取或设置ArrayList可包含的元素个数 |
Count | 获取ArrayList实际包含的元素个数 |
举例
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
public Customer(string name, int age)
{
Name = name;
Age = age;
}
}
Customer z = new Customer("z", 1);
Customer s = new Customer("s", 2);
Customer q = new Customer("q", 2);
ArrayList list = new ArrayList(2);
Console.WriteLine("集合可储存元素数:{0}",list.Capacity);
Console.WriteLine("集合实际元素数:{0}", list.Count);
list.Add(z);
Console.WriteLine("集合可储存元素数:{0}", list.Capacity);
Console.WriteLine("集合实际元素数:{0}", list.Count);
list.Add(s);
Console.WriteLine("集合可储存元素数:{0}", list.Capacity);
Console.WriteLine("集合实际元素数:{0}", list.Count);
list.Add(q);
Console.WriteLine("集合可储存元素数:{0}", list.Capacity);
Console.WriteLine("集合实际元素数:{0}", list.Count);
运行结果
刚开始时,我们创建时指定ArrayList的容量为2,当我们添加两个数据时,集合可储存元素数是2,集合实际元素数是2,当我们添加第三个数据时超出了我们创建时给的容量,集合可储存元素数变成了4。依次往后退,我们添加五个数据,集合可储存数据会变成8......
so,我们可以知道,ArrayList集合的索引也是从0开始,ArrayList中储存的元素超出容量时,其容量将会自动增长一倍
ArrayList的常用方法
方法 | 功能说明 |
Add(object obj) | 将元素添加到ArrayList结尾处 |
Insert(int index,object obj) | 将元素添加到ArrayList的指定位置 |
Remove(object obj) | 移除ArrayList指定的元素 |
RemoveAt(int index) | 移除ArrayList指定索引处元素 |
Clear() | 清除ArrayList中的所有元素 |
Sort() | 将ArrayList中的元素排序 |
Reverse() | 将ArrayList中的元素顺序反转 |
TrimToSize() | 将ArrayList容量数设置为实际元素个数 |
举例使用Add()和insert()向集合添加元素
模拟办理业务排队
atic void Main(string[] args)
{
int num = 1;
Customer te = new Customer("te", 1);
Customer t = new Customer("t", 2);
Customer ji = new Customer("ji", 3);
ArrayList list= new ArrayList();
list.Add(te);
list.Add(t);
list.Insert(0, ji);
Console.WriteLine("排队的人有:");
foreach(object obj in list) {
Customer j=obj as Customer;
Console.WriteLine("{0}号客户:{1}",num++,j.Name);
}
}
Add()方法是添加数据,Insert()方法可以指定元素位置
删除元素Remove()可以指定删除哪个元素
static void Main(string[] args)
{
int num = 1;
Customer te = new Customer("te", 1);
Customer t = new Customer("t", 2);
Customer ji = new Customer("ji", 3);
ArrayList list= new ArrayList();
list.Add(te);
list.Add(t);
list.Insert(0, ji);
list.Remove(ji);
Console.WriteLine("排队的人有:");
foreach(object obj in list) {
Customer j=obj as Customer;
Console.WriteLine("{0}号客户:{1}",num++,j.Name);
}
}
RemoveAt()
static void Main(string[] args)
{
int num = 1;
Customer te = new Customer("te", 1);
Customer t = new Customer("t", 2);
Customer ji = new Customer("ji", 3);
ArrayList list= new ArrayList();
list.Add(te);
list.Add(t);
list.Insert(0, ji);
list.Remove(ji);
list.RemoveAt(0);
Console.WriteLine("排队的人有:");
foreach(object obj in list) {
Customer j=obj as Customer;
Console.WriteLine("{0}号客户:{1}",num++,j.Name);
}
}
运行结果
Clear()
static void Main(string[] args)
{
int num = 1;
Customer te = new Customer("te", 1);
Customer t = new Customer("t", 2);
Customer ji = new Customer("ji", 3);
ArrayList list= new ArrayList();
list.Add(te);
list.Add(t);
list.Insert(0, ji);
list.Remove(ji);
list.RemoveAt(0);
list.Clear();
Console.WriteLine("排队的人有:");
foreach(object obj in list) {
Customer j=obj as Customer;
Console.WriteLine("{0}号客户:{1}",num++,j.Name);
}
}
clear()清除所有数据,当前排队人数为0
HashTable字典集合
hashtable是用于处理key/value(键/值)对的集合容器
使用
static void Main(string[] args)
{
int num = 1;
Customer te = new Customer("ss", 1);
Customer t = new Customer("tt", 2);
Customer ji = new Customer("jary", 3);
Hashtable list=new Hashtable();
list.Add(te.Name,te);
list.Add(t.Name,t);
list.Add(ji.Name,ji);
//查找客户姓名为jary的人
string name = "jary";
Customer customer = list[name] as Customer;
Console.WriteLine("{0}客户被找到",name);
}
运行结果
HashTable的常用属性
属性 | 功能说明 |
Keys | 获取包含HashTable中所有键的ICollection (可以遍历该属性访问HashTable中的所有键) |
Values | 获取包含HashTable中所有值的ICollection (可以遍历该属性访问HashTable中的所有值) |
Count | 获取HashTable中键/值对的数目 |
使用
static void Main(string[] args)
{
Customer te = new Customer("ss", 1);
Customer t = new Customer("tt", 2);
Customer ji = new Customer("jary", 3);
Hashtable list=new Hashtable();
list.Add(te.Name,te);
list.Add(t.Name,t);
list.Add(ji.Name,ji);
Console.WriteLine("list包含一下键:");
foreach(object key in list.Keys)
{
Console.WriteLine(key);
}
Console.WriteLine("list包含一下值:");
foreach(object value in list.Values)
{
Customer cs=value as Customer;
Console.WriteLine("姓名:{0}年龄:{1}",cs.Name,cs.Age);
}
Console.WriteLine("list中键值对的个数{0}",list.Count);
}
运行效果
foreach循环的优点
语言简洁
循环效率比for高
不用关心数值的起始索引
HashTable常用方法
方法 | 功能说明 |
Add(object key,object value) | 将带有指定键和值的元素添加到HashTable中 |
Remove(object Key) | 从HashTable中移除带有指定键的元素 |
CLear() | 移除HashTable中的所有元素 |
ContainKey(object key) | 确定HashTable中是否包含指定键 |
ContainsValue(object value) | 确定HashTable中是否包含指定值 |