深入.NET平台和C#编程 第四章 学习笔记

 

深入.NET平台和C#编程
第四章  用集合组织相关数据
【集合概述】
将很多数据封装在一个对象中
【ArrayList类】
命名空间 :System.Collections
ArrayList类似于数组 ,ArrayLists的容量是动态的,而数组是的容量是固定的
 
例:
如图,有一个学生类和一个枚举,在主程序中建立学员集合
 
 
 
 
 
// 建立班级学员的集合
ArrayList sturdents = new ArrayList();
 
Student zhangsan = new Student(" 张三" ,Genders.Male,20," 足球" );
Student Lisi = new Student(" 李四" , Genders.Female, 18, " 编程" );
 
 
// 添加元素演示
 
students.Add(zhangsan);
students.Add(Lisi);
 
// 打印集合数目
MessageBox .Show(string.Format(" 共包括{0} 个学员。" ,
    students.Count.ToString()));
 
存取ArrayList中的单个元素:
可以通过索引来访问ArrayList集合,ArrayList可以添加类型的对象,添加到ArrayList集合中会转换为Object类型.所以访问元素时必须将其转换为原类型.
 
Student stu1 = (Student)students[1];
stu1.SayHi();
 
删除 ArrayList中的元素,当删除一个元素后,集合自动更新下标(索引删除元素将存在风险)
删除元素有三种方式 :
1.     通过 RemoveAt(intindex)方法删除指定下标的元素.
2.     通过 Remove(object value)方法删除指定对象名的元素.
3.     通过 Clear()方法清除集合的所有元素.
 
// 删除students集合中的元素
students.RemoveAt(1);
students.Remove("zhangsan");
students.Clear();
 
遍历ArrayList中的数组
 
for (int i = 0; i < sturdents.Count; i++)
{
    Student stu = (Student)students[i];
    stu.SayHi();
}
 
 
foreach (Student student in students)
{
    Student stu = (Student)student;
    stu.SayHi();
    MessageBox.Show(stu.Name);
}
 
 
【HashTable类】
命名空间 :System.Collections
HashTable 哈希表,键值对集合(key,value),通过key可以找到value.
 
例:
Hashtable students = new Hashtable();
 
Student zhangsan = new Student(" 张三" , Genders.Male, 30, " 足球" );
Student Lisi = new Student(" 李四" , Genders.Male, 28, " 唱歌" );
 
// 添加元素演示使用学生名字作为Key
 
students.Add(zhangsan.Name,zhangsan);
students.Add(Lisi.Name,Lisi);
 
// 打印集合数目
MessageBox .Show(string.Format(" 共包括{0} 个元素。" ,students.Count.ToString()));
 
获取HashTable的元素:
可以通过Key获取具体的值,同样由于值的类型是Object型,所以当得到一个值时也需要通过类型转换为正确的类型.
Student stu = (Student)students[" 张三" ];
stu.SayHi();
 
 
遍历 HashTable元素:
由于 HashTable不能使用索引访问,所以哈希表只能Foreach()方法
 
// 通过students.Value遍历,而不是students对象本身
//Values 属性获取哈希表中的所有值,还可通过keys属性遍历出所有的键值
foreach (Student student in students.Values)
{
    Student stus = (Student)student;
    stus.SayHi();
    Console.WriteLine(stus.Name);
}
 
 
删除哈希表的元素:
删除一个元素使用它的key值,使用Reover()和Clear()方法
 
students.Remove(" 张三" );
students.Clear();
 
 
【泛型集合】
通过泛型可以定义安全的数据类型,最显著的应用就是创建集合类.
泛型的两大优点:
1.     性能高,传统集合在添加的元素是Object型,如果添加一个值类型的数据,就需要把它转换为引用类型,取出一个元素也要转回原类型,这就需要拆箱装箱操作(占用CPU),而泛型无需转型操作.
2.     类型安全,泛型集合对存储对象作了类型约束.
 
【List<T>】
命名空间 :System.Collections.Generic
<T>可以对集合中的对象进行约束 ,T表示集合中管理元素的类型,泛型集合必须实例化.
可以替换 ArrayList
 
// 创建学生对象
Student zhangsan = new Student(" 张三" , Genders.Male, 30, " 足球" );
Student Lisi = new Student(" 李四" , Genders.Male, 28, " 唱歌" );
Student wangwu = new Student(" 王五" , Genders.Male, 28, " 唱歌" );
 
// 实例化List<T>,类型为Student
List <Student> stu = new List<Student>();
 
// 向stu泛型集合中添加元素
stu.Add(zhangsan);
stu.Add(Lisi);
stu.Add(wangwu);
 
//For and Foreach 遍历stu
for (int i = 0; i < stu.Count; i++)
{
    Console.WriteLine(stu[i].Name);
}
 
foreach (Student st in stu)
{
    Console.WriteLine(st.Name);
}
 
// 删除元素通过索引或对象名
stu.RemoveAt(1);
stu.Remove(wangwu);
 
// 打印元素个数
Console .WriteLine(stu.Count.ToString());
 
【Dictionary<K,V>】
Dictionary<K,V>具有泛型的全部特点 ,编译时检查类型约束,存储方式与哈希表存储方式类似,也是通过键值对保存元素.
 
// 创建学生对象
Student zhangsan = new Student(" 张三" , Genders.Male, 30, " 足球" );
Student Lisi = new Student(" 李四" , Genders.Male, 28, " 唱歌" );
Student wangwu = new Student(" 王五" , Genders.Male, 28, " 唱歌" );
 
// 实例化Dictionary泛型集合
Dictionary <string, Student> stu = new Dictionary<string, Student>();
 
// 添加元素,使用姓名作为KEY
stu.Add(zhangsan.Name,zhangsan);
stu.Add(Lisi.Name,Lisi);
stu.Add(wangwu.Name,wangwu);
 
// 打印集合个数
Console .WriteLine(stu.Count.ToString());
 
// 通过Key获取元素
Student stu1 = stu[" 张三" ];
stu1.SayHi();
 
// 删除元素因为没有索引,只能通过key删除元素
stu.Remove(" 王五" );
 
// 遍历sut,因为没有索引,所有只能用Forcach遍历
foreach (Student st in stu.Values) // 遍历Values与HashTable类似
{
    st.SayHi();
    Console.WriteLine(st.Name);
}
 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值