为什么使用集合?
使用集合能够更加方便存储数据。
特点:集合的长度是动态的
集合的概念
跟数组一样也是通过下标访问元素
集合当中的元素都是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(); //调出类里的方法打印出来
}
|