null第六章第六章使用集合组织相关数据回顾与作业点评回顾与作业点评什么是封装?如何实现封装?
类的公有和私有成员在类图中如何
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
现?
class Test{
static void Main(string[] args){
Student[] stus = new Student[2]{new Student(),new Student()};
stus[0].Age = 10; stus[0].Name = "张靓";
stus[1].Age = 19; stus[1].Name = "小新";
int num = 0;
Test.ChangeAge(stus,num);
}
public static void ChangeAge(Student[] stu, int num){
for (int i = 0; i < stu.Length; i++) {
if (stu[i].Age < 15) {
stu[i].Age = 15;
num++;
}
}
}
} 说出调用方法后,num以及学生的姓名和年龄num:0
张靓:15
小新:19 预习检查预习检查
ArrayList中如何添加数据?
定义泛型集合时的特殊语法符号?
本章任务本章任务实现员工信息管理
实现员工考勤管理
本章目标理解集合的概念
熟练使用集合访问数据
理解泛型的概念
熟练使用各种泛型集合
本章目标数组的局限性数组的局限性能否动态的维护一个集合?SE[ ] engineers = new SE[3];
engineers[0] = new SE();
engineers[1] = new SE();
……如果每个部门的人数不固定 部门中来了一个新同事 调整大小困难增加元素困难重新定义数组 3个工程师对象组成的集合 数组长度定义很大 可维护动态长度的集合可维护动态长度的集合ArrayList是一个可动态维护长度的集合新增元素 可删除元素 可访问单个元素 objectobjectobjectobject0123索引(下标)object40123ArrayList自动调整索引通过索引访问ArrayList的初始化ArrayList的初始化引入System.Collections命名空间
实例化ArrayList对象using System.Collections;
…
ArrayList engineers = new ArrayList();
ArrayList engineers = new ArrayList(5)可以指定长度引入命名空间实例化一个对象常见错误未引入命名空间定义时未实例化ArrayList添加元素ArrayList添加元素建立部门工程师集合int Add(Object value) //添加一个对象到集合的末尾ArrayList engineers = new ArrayList();
SE jack = new SE();
jack.Name = "王小毛";
……
engineers.Add(jack); 创建工程师对象 添加对象到集合 连续添加三个工程师对象
并获取集合元素的数目返回索引engineers.Count获取元素数目访问ArrayList元素访问ArrayList元素获取集合元素,并执行问好(类型) ArrayList [index] //按指定索引(下标)取得对象SE engineer = (SE) engineers[0];
MessageBox.Show(engineer.SayHi());
…按索引取值转换为工程师对象需要类型转换ArrayList 的遍历ArrayList 的遍历可以使用和数组类似的方式foreach (Object obj in engineers)
{
SE seForeach = (SE)obj;
Console.WriteLine(seForeach.Name);
} 通过对象遍历王小毛
周新雨
张烨for (int i = 0; i < engineers.Count; i++)
{
SE seFor = (SE)engineers[i];
Console.WriteLine(seFor.Name);
}foreach 方式类型转换删除ArrayList的元素删除ArrayList的元素ArrayList.Remove(对象名) //删除指定对象名的对象
ArrayList.RemoveAt(index) //删除指定索引的对象
ArrayList.Clear() //清除集合内的所有元素engineers.RemoveAt(0);
engineers.Remove(ema);
MessageBox.Show(string.Format("部门共包括 {0} 个工程师。",
engineers.Count.ToString()));
SE leave = (SE)engineers[0];
MessageBox.Show(leave.SayHi()); 通过索引删除元素剩余的元素会自动调整索引通过指定对象删除元素常见错误2-1常见错误2-1//…
//添加元素
engineers.Add(jack);
engineers.Add(joe);
engineers.Add(ema);
//删除元素
engineers.RemoveAt(0);
engineers.RemoveAt(1);
engineers.RemoveAt(2);运行这段代码会发生错误?索引会自动调整,删除两个元素后,不再有索引“2”常见错误2-2常见错误2-2//定义三个SE对象(省略)
SE se2 = new SE();
se2.Name = "王小毛";
se2.Age = 26;
……
engineers.Add(se2);
engineers.Remove(se2);
//打印集合数目
…定义一个对象与前面定义的jack对象属性值相同Remove(se2),能否删除 jack对象?小结小结学生类Student已定义,属性为:Name、Age
使用ArrayList存储学生集合
添加两个学生(周杰伦,22;杨伊,21)
使用for和foreach遍历学生信息
参考
答案
八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案
为什么使用哈希表为什么使用哈希表ArrayList通过索引获取对象是否能够通过关键字获取该对象呢?动态可维护长度可通过关键字检索C#提供另一种集合集合:Hashtable SE engineer = (SE) engineers[0];ArrayList中元素频繁变化,跟踪元素下标很困难什么是HashTable什么是HashTableArrayList 每个元素对应一个索引
Hashtable 通常称为哈希表
根据键(Key)可以查找到相应的值 (Value)objectobjectobjectobjectobject0123…ArrayList索引KeyValueKeyValueKeyValueKeyValueKeyValueHashtable值键键和值一一对应使用哈希表使用哈希表给哈希表添加元素Hashtable engineers = new Hashtable();
engineers.Add(jack.ID, jack);添加元素KeyValueSE se2 = (SE) engineers["000"];
se2.SayHi();通过key获取元素sengineers.Remove("000");
…通过key删除元素获取哈希表的元素删除哈希表的元素需要类型转换哈希表的遍历哈希表的遍历foreach(Object obj in engineers.Values)
{
SE se = (SE)obj;
Console.WriteLine(se.Name);
}如何遍历一个哈希表?KeyValueKeyValueKeyValueKeyValueKeyValueValues不能遍历整个对象,而是遍历Valuesforeach (Object obj in engineers.Keys)
{
Console.WriteLine((string)obj);
} 可以遍历Keys小结小结删除一个ArrayList元素有几种方法?
Hashtable和ArrayList的主要区别是什么?类型安全2-1类型安全2-1考虑出现的问题……
PM pm = new PM();
pm.Name = "盖茨";
pm.Id = "8230";
……
engineers.Add(jack);
engineers.Add(joe);
engineers.Add(ema);
engineers.Add(pm); //添加一个项目经理对象能否加入一个PM对象?foreach (Object obj in engineers)
{
SE engineer = (SE)obj;
MessageBox.Show(engineer.SayHi());
} 遍历这个集合是否有问题?类型安全2-2类型安全2-2SE集合王小毛周新雨张烨盖茨添加对象遍历集合,转换为SE对象对象存储不易控制类型转换容易出错!!!PM对象运行错误使用List
加强类型安全使用List加强类型安全使用List……
List engineers = new List();
engineers.Add(jack);
engineers.Add(joe);
engineers.Add(ema);
engineers.Add(pm); //添加一个项目经理对象
……将SE对象加入工程师集合编译出错泛型集合什么是泛型集合什么是泛型集合泛型最常见的用途是创建集合类
泛型集合可以约束集合内的元素类型
典型泛型集合List,Dictionary
、表示该泛型集合中的元素类型ListSE对象PM对象允许添加不允许添加SE对象无需转换类型使用List泛型集合使用List泛型集合命名空间:System.Collections.Generic
创建List泛型集合
遍历List engineers = new List();
foreach (SE se in engineers)
{
MessageBox.Show(se.SayHi());
}只能保存SE对象无需类型转换VS 2010 自动引入List的访问方式与ArrayList类似List 与 ArrayListList 与 ArrayList访问 List 与 ArrayList 的对比
是否有哈希表那样存储Key和Value形式的泛型集合呢? Dictionary概述Dictionary概述Dictionary通常称为字典
约束集合中元素类型
编译时检查类型约束
无需装箱拆箱操作
与哈希表操作类似Dictionary的使用Dictionary的使用engineers.Add(jack.ID,jack);
…
SE engineer = engineers["000"];
…
engineers.Remove("000");
…添加一对Key/Value通过Key获取元素通过Key删除元素//Dictionary 方式
foreach (SE se in engineers.Values)
{
MessageBox.Show(se.SayHi());
} 遍历ValuesDictionary engineers
= new Dictionary();Key存储String类型Value存储SE类型利用Dictionary存储工程师列表Dictionary与哈希表Dictionary与哈希表访问 Dictionary 与 哈希表 的对比
泛型泛型泛型
操作的数据类型被定义为一个参数
泛型类如何选中ComboBox中的一项后,获得对应的一个对象class ComboBoxItem
{
private string _itemText; //显示的文字
public string ItemText
{
get { return _itemText; }
set { _itemText = value; }
}
private T _itemValue; //实际的对象
public T ItemValue
{
get { return _itemValue; }
set { _itemValue = value; }
}
}泛型的重要性泛型的重要性泛型的重要性
泛型是未来的主流技术之一
解决了很多需要繁琐操作的问题
提供了更好的类型安全性
CLR 支持泛型指导——新增员工和显示列表2-1指导——新增员工和显示列表2-1训练要点:
泛型集合List
需求说明:
实现员工信息和考勤管理系统
实现新增员工(员工ID唯一)
使用DataGridView控件展示员工列表指导——新增员工和显示列表2-2指导——新增员工和显示列表2-2实现思路:
实现新增功能
实现展示员工列表功能
难点指导:
向集合List中新增对象
使用maintanceType标识操作(1:新增、0:修改)
验证:工号不能重复
使用DataGridView控件展示集合信息
完成时间:30分钟this.dgvProgrammer.DataSource = new BindingList(list);练习——模糊查询和信息删除练习——模糊查询和信息删除需求说明:
实现删除员工信息
实现根据员工工号进行模糊查询完成时间:20分钟共性问题集中讲解共性问题集中讲解常见调试问题及解决办法
代码
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
问题共性问题集中讲解指导——签到和签退2-1指导——签到和签退2-1训练要点:
泛型集合Dictionary
需求说明:
实现员工签到和签退
每天只能签到1次
签退前必须已经签到
指导——签到和签退2-2指导——签到和签退2-2实现思路:
编写考勤记录类Record
使用Dictionary保存考勤记录
编写签到和签退响应,并给出相应提示讲解需求说明完成时间:30分钟练习——显示考勤记录练习——显示考勤记录需求说明:
使用DataGridView控件显示员工考勤记录
提示
DataGridView显示字典泛型集合数据完成时间:15分钟BindingSource bs = new BindingSource(); //创建BindingSource对象
bs.DataSource = recordList.Values; //设置DataSource为字典Values
this.dgvRecords.DataSource = bs; //设置dgv的DataSource为bs共性问题集中讲解共性问题集中讲解常见调试问题及解决办法
代码规范问题共性问题集中讲解总结总结哈希表如何获取一个元素的Value?
ArrayList与哈希表存取对象需要什么操作?
List中的T表示什么?
泛型集合与传统集合获取元素时的区别?