集合


为什么使用集合? 使用集合能够更加方便存储数据。 特点:集合的长度是动态的 集合的概念 跟数组一样也是通过下标访问元素 集合当中的元素都是object类型 它会自动调整下标索引 集合初始化器 由一系列元素初始化器构成,包围在"{"和"}"之间,并使用逗号进行分隔 为什么使用hashtable 根据键(Key)可以查找到相对于的值(value) 创建ArrayList集合的步骤: 1导入System.collections命名空间 2实例化Arraylist对象 示例 ArrayList 集合名=new ArrayList (); //括号里可以设置长度 一般不设置 集合可以指定长度也可以不知道长度,一般不指定 如何向ArrayList集合中添加数据? 使用集合的Add()方法 示例: Count:验证集合当中有多少个元素 注意:向集合中添加值类型的数据会执行装箱操作 对象初始化器:
SE se=new SE(){字段名="数据",字段名="数据"}; SE se1=new SE(){字段名="数据",字段名="数据"}; SE se2=new SE(){字段名="数据",字段名="数据"};
//顺序可以自定义 第一种集合:ArrayList 把对象初始化器里数据放入集合 方法1
ArrayList list=new ArrayList(){对象名,对象1,对象2}; //把对象放入集合初始化器
把对象初始化器里数据放入集合 方法2
ArrayList list=new ArrayList(){ new SE(){name="张三",age=18}, new SE(){name="李四",age=16} };
for循环访问集合中的元素
for(int i=0; i SE s1=(SE)list[i] //通过下标访问元素 , 打印出s1 }
foreach循环访问集合中的元素
foreach (object obj in list) //类型object 因为集合中都是object类型 { SE s1=(SE)obj; 打印出s1 }
ArrayList常用方法及属性
属性名称 说明
Count 获取Arraylist 中实际包含的元素数
返回值类型 方法名称 说明
int Add(Object value) 将对象添加到ArrayList的结尾处
void RemoveAt(int index) //(索引) 移除ArrayList指定索引处的元素
void Remove(Object value) //(对象名) 从Arraylist中移除特定对象
void Clear() 从Arraylist中移除所有元素
  第二种集合:Hashtable (哈希表),先导入命名空间System.collections 通过键来获取hashtable的值 语法: 集合名[键] 获取的值要进行强制类型转换 根据键(Key)跟值(Value)获取值 对象初始化器
SE se=new SE(){字段名="数据",字段名="数据"}; SE se1=new SE(){字段名="数据",字段名="数据"}; SE se2=new SE(){字段名="数据",字段名="数据"};
把对象初始化器数据放入Hashtable 集合
Hashtable h=new Hashtable(); h.Add(se.Name,se); //add方法添加的是键和值 键和值由自己决定 键和值是一一对应的 h.Add(se1.Age,se1); //键不能有一样的 值可以 h.Add("王五",se2);
  遍历Hashtable 的值 values
foreach(object obj in 集合名.values) //遍历值 { SE se=(SE)obj; Console.WriteLine(se.Name); }
遍历键 Keys
foreach(object obj in 集合名.Keys) //遍历键 { String ob=obj.Tostring(); //可以省略 他会自动转换类型 Console.WriteLine(ob); }
遍历键跟值
foreach(DictionaryEntry en in 集合名) { Console.WriteLine(en.Key); //键 SE s1=(SE)en.value //值 s1.SayHi(); //调出类里的方法打印 }
  第三种 泛型集合 List 命名空间:System.collections.Generic *常用3 为什么使用泛型集合 泛型最常见的用途就是创建集合类 泛型集合可以约束集合内的元素类型 典型泛型集合List、Dictionary t表示该泛型集合中的元素类型 对象初始化器
SE se=new SE(){字段名="数据",字段名="数据"}; SE se1=new SE(){字段名="数据",字段名="数据"}; SE se2=new SE(){字段名="数据",字段名="数据"};
把对象初始化器里的数据添加到集合
List list=new List(); //只能添加<>里一样的对象数据,添加不同对象对象数据会报错 list.add(se); //对象名
遍历
foreach(SE se in 集合名) { sa.sayhi(); //调出SE类里面的打印方法 }
泛型集合对DataGridView的绑定 把泛型集合数据绑定到DataGridView控件中:
IList list= new List(); DataGridView.DataSource=list;//DataGridView的行不能添加删除 DataGridView.DataSource=new BindingList(list);//DataGridView的行可以添加删除(只有允许添加行、删除行)
DataGridView控件中对内容进行泛型集合模糊查询
List listl = new List(); foreach (SE sl in list) { if (sl.ID.IndexOf(this.txtchaxun.Text) != -1) { listl.Add(sl); } } this.dataGridView1.DataSource = new BindingList(listl); //重新绑定数据
泛型集合对DataGridView的删除 删除单行数据 //list 集合的对象名
int index = this.dataGridView1.CurrentRow.Index; //获取选中的索引 this.list.RemoveAt(index); //RemoveAt()方法删除 选中的索引 this.dataGridView1.DataSource = new BindingList(list); //重新绑定数据
添加数据
string add=this.txtAdd.Text; //获取文本框内容 SE se7 = new SE("3225", add); //获取到的内容插入到对象数组 list.Add(se7);//放入到泛型集合 this.dataGridView1.DataSource = new BindingList(list); //重新绑定
删除多行数据
DataGridViewSelectedRowCollection rows = this.dataGridView1.SelectedRows; //存放DataGridViewRow的容器 foreach (DataGridViewRow row in rows) { this.list.RemoveAt(row.Index); } this.dataGridView1.DataSource = new BindingList(list); //重新绑定数据
插入数据,如图:选中插入位置  
int index = this.dataGridView1.SelectedRows[0].Index + 1; //获取选中的位置 SE insertStudent = new SE(); //实例化信息对象类 insertStudent.ID = "S2001"; //给字段赋值 insertStudent.Name = "王五"; list.Insert(index, insertStudent); //向集合插入数据 this.dataGridView1.DataSource = new BindingList(list); //重新绑定
  第四种集合 Dictionary *常用2 dictionary通常称为字典 编译时检查类型约束 无需装箱拆箱 想集合添加数据 对象初始化器
SE se=new SE(){字段名="数据",字段名="数据"}; SE se1=new SE(){字段名="数据",字段名="数据"}; SE se2=new SE(){字段名="数据",字段名="数据"};
把对象初始化器里数据添加到集合
Dictionary dic=new Dictionary (); //可以定义它的类型 dic.Add(se.Name,se); dic.Add(se1.Name,se1); dic.Add(se2.Name,se2);
遍历
foreach(string str in dic.Keys) //遍历键 { Console.WriteLine(str); }
遍历
foreach(SE s1 in dic.Values) //遍历值 { s1.sahi(); // 调用类里的方法打印出来 }
遍历键和值
foreach(KeyValuePair Kvp in dic) //遍历键 { Console.WriteLine(Kvp,Key); Kvp.value.SayHi(); //调出类里的方法打印出来 }