使用集合组织相关数据
ArrayList是一个可动态维护长度的集合
ArrayList 每个元素对应一个索引
实现步骤:
1.引入System.Collections命名空间
2.实例化ArrayList对象
添加元素:
ArrayList engineers = new ArrayList();
//创建工程师对象
SE jack = new SE();
jack.Name = "王小毛”
……
//添加对象到集合
engineers.Add(jack);
//获取集合元素的数目
MessageBox.Show(engineers.Count);
//向ArrayList中添加值类型的元素时,会执行装箱处理
集合初始化器
C#3.0语言的新特性之一
由一系列元素初始化器构成,包围在“{”和“}”之间,并使用逗号进行分隔
ArrayList engineers = new ArrayList()
{
new SE()
{
Name = "王小毛",Age = 26,
Gender = Gender.male,ID = "000",Popularity = 10
},
new SE()
{
Name = "周新雨",Age = 22,
Gender = Gender.female,ID = "111",Popularity = 20
},
new SE()
{
Name = "张烨",Age = 30,
Gender = Gender.male,ID = "222",Popularity = 20
}
};
访问ArrayList单个元素
(类型) ArrayList [index] //按指定索引(下标)取得对象
//如
SE engineer = (SE) engineers[0];
MessageBox.Show(engineer.SayHi());
ArrayList遍历数组
for方式
for (int i = 0; i < engineers.Count; i++)
{
SE seFor = (SE)engineers[i];
Console.WriteLine(seFor.Name);
}
foreach方式
foreach (Object obj in engineers)
{
SE seForeach = (SE)obj;
Console.WriteLine(seForeach.Name);
}
删除ArrayList的元素
ArrayList.Remove(对象名) //删除指定对象名的对象
ArrayList.RemoveAt(index) //删除指定索引的对象
ArrayList.Clear() //清除集合内的所有元素
Hashtable集合
动态可维护长度
可通过关键字检索
Hashtable 通常称为哈希表
给Hashtable添加元素
Hashtable engineers = new Hashtable();
engineers.Add(jack.ID,jack);
// Key Value
获取Hashtable的元素
SE se2 = (SE) engineers["000"]; //需要类型转换
se2.SayHi(); //通过key获取元素
删除Hashtable的元素
engineers.Remove("000"); //通过key删除元素
Hashtable的遍历
不能遍历整个对象,而是遍历Values
foreach(Object obj in engineers.Values)
{
SE se = (SE)obj;
Console.WriteLine(se.Name);
}
可以遍历Keys
foreach (Object obj in engineers.Keys)
{
Console.WriteLine((string)obj);
}
可以遍历键/值对
foreach (DictionaryEntry en in engineers)
{
Console.WriteLine((string)obj);
Console.WriteLine(((SE)en.value).Name);
}
List泛型集合
List<SE> engineers = new List<SE>();
//将SE对象加入工程师集合
engineers.Add(jack);
engineers.Add(joe);
engineers.Add(ema);
engineers.Add(pm); //添加一个项目经理对象
泛型最常见的用途是创建集合类
泛型集合可以约束集合内的元素类型
**典型泛型集合List、Dictionary<K,V>
u****、<K,V>表示该泛型集合中的元素类型
1.命名空间:System.Collections.Generic
2.创建List泛型集合
3.遍历
List<SE> engineers = new List<SE>();
foreach (SE se in engineers)
{
MessageBox.Show(se.SayHi());
}
访问List 与 ArrayList 的对比
异同点 | List | ArrayList |
---|---|---|
不同点 | 增加元素时类型严格检查 | 可以增加任何类型 |
添加和读取值类型元素时,无需装箱拆箱 | 添加和读取值类型元素时,需要装箱拆箱 | |
相同点 | 通过索引访问集合的元素 | 通过索引访问集合的元素 |
添加对象方法相同 | 添加对象方法相同 | |
通过索引删除元素 | 通过索引删除元素 |
Dictionary<K,V>
Dictionary<K,V>通常称为字典
<K,V>约束集合中元素类型
编译时检查类型约束
无需装箱拆箱操作
利用Dictionary<K,V>存储工程师列表
Dictionary<string, SE> engineers = new Dictionary<string,SE>();
engineers.Add(jack.ID,jack); //添加一对Key/Value
…
SE engineer = engineers["000"]; //通过Key获取元素
…
engineers.Remove("000"); //通过Key删除元素
遍历Dictionary
遍历key值
foreach(int key in names.Keys)
{
Console.WriteLine(key);
}
遍历key取集合Value
foreach (int key in names.Keys)
{
Console.WriteLine(names[key]);
}
遍历所有key下的value
foreach (string val in names.Values)
{
Console.WriteLine(val);
}
访问 Dictionary<K,V> 与 Hashtable 的对比
异同点 | Dictionary<K,V> | Hashtable |
---|---|---|
不同点 | 增加元素时类型严格检查 | 可以增加任何类型 |
无需装箱拆箱 | 需要装箱拆箱 | |
相同点 | 通过Key获取Value | 通过Key获取Value |
添加对象方法相同 | 添加对象方法相同 | |
遍历方法 | 遍历方法 |
遍历字典下的集合
foreach(grade key in stus.Keys)
{
if(key.ClsNo == 128)
{
Console.WriteLine(stus[key]);
foreach(Studnet value in stus[key])
{
Console.WriteLine(value.name,value.age ……);
}
}
}
泛型的重要性
1.实现代码重用,未来的主流技术
2.性能高,避免繁琐的装箱拆箱
3.提供了更好的类型安全性
4.CLR支持泛型