集合:某些对象集中在一起就是集合。就是怎么easy!
1.ArrayList可以动态扩容,并且它的索引会 根据程序的扩展而重新进行分配和调整。被删除的对象,索引也并不会占位,这是区别于数组的两点。默认初始容量为0.ArrayList类属于System.Collection空间,包含接口和类。
ArrayList提供了一系列方法对其中的元素进行访问,增加和删除操作。
ArrayList常用属性和方法:
Add(Object value)将对象添加到ArrayList的结尾处。并且返回值 为int。
Remove(Object value)将指定的元素删除,并且一次只删除一个。
RemoveAt(int index)将指定元素下标的值删除。
Insert(int index,Object Value)将指定的元素添加到指定的下标。
Contains(Object Value)判断指定的元素是否存在集合中,布尔返回值。
Clear()删除集合中的所有元素
属性:
Count:查询集合中的元素个数。
集合初始化器:就是更简单的方法对集合中的元素赋值。
eg:
ArrayList list = new ArrayList();
{
new Book(){BookName="越狱"}//每一项用逗号隔开,最后一项不用逗号
...
};
可以使用For循环和Foreach循环遍历集合。
经验:集合的难点不在于方法的使用,而在于综合使用解决项目中的实际问题。
2.Hashtable的使用
Hashtable不能通过下标访问数据,双列集合是通过键访问值的。
Hashtable的常用属性和方法
Count :获取键值对的数目
keys:键的集合
Values:值的集合
Add(Object key,Object Value):将指定的键和值的元素添加到集合中。
Remove(Object Key):移除带有指定键的元素
Clear():移除所有元素
eg: Hashtable ht = new Hashtable();
SE jack = new SE();
jack.Name="lai ";
jack.Age = 35;
...........
jack.ID = "001";
//向Hashtable中添加元素
ht.Add(jack.ID,jack);
Hashtable只能用foreach遍历集合中的数据。
eg:
foreach(Object obj in ht.Values)
{
//遍历值
cw(se.Name);
}
或者
foreach(string key in ht.Keys)
{
//将键值对全部遍历出来
cw(ht[key]);
}
3.泛型集合
泛型是C#2.0的一个新特性。泛型引入一个概念:类型参数。是一个数据类型,可以是类类型,基本数据类型。通过使用<T>类型参数
1.减少装箱和类型强转时的风险。
2.通过泛型可以最大限度的重用代码,保护类型的安全及提高性能,最常用的就是创建集合类,可以约束集合类中的元素类型。比较典型的是List<T>和Dictionary<K,V>.
定义一个List<T>泛型集合的方法
语法:
List<T> 对象名 = new List<T>();//泛型集合必须实例化
eg:
//通过索引访问
SE se = new se[0];
se.SayHi();
//通过索引或者对象删除
ses.RemoveAt(0);
ses.Remove(ema);
//打印集合数目
ses.Count.Tostring();
//遍历。for也可
foreach(SE se in ses)
{
//遍历时无须类型转换
cw(se.SayHi());
}
4.List<T>与ArrayList的区别
相同点:
1.通过索引访问集合中的元素。
2.添加元素方法相同。Add(Object Value)
3.删除元素方法相同。RemoveAt(int index)或Remove(Object Value)
不同点:
List<T>:对保存元素进行类型约束。
ArrayList:可以增加任何类型。
List<T>:添加/读取值类型不用进行装箱,拆箱操作。
ArrayList:添加/读取值类型需要进行装箱,拆箱操作。
<泛型集合Dictionary<K,V>>
它具有泛型的全部特性,编译时检查类型约束,获取元素值时无须类型转换。它存储数据的方式与Hashtable类似,也是通过Key.Value键值对保存元素的。
语法:
Dictionary<k,v> 对象名 = new Dictionary<k,v>();//定义泛型集合必须实例化
eg:
Dictionary<string,SE> ht = new Dictionary<string,SE>();
ht集合的Key类型是string ,Value是SE类型
SE jack = new SE();
jack,Name="我";
jack.ID = "1";
SE joe = new SE();
joe.Name ="张三";
......
ht.Add(jack.ID,jack);//添加元素
。。。
//打印集合元素
ht.Count.Tostring();
//通过Key访问元素
SE ht = ht["1"];
//通过key删除元素
ht.Remove(“1”);
//遍历只能用for,因为双列集合无索引,并且是无序的。
foreach(SE se in ht.Values
{
cw(se.SayHi());//遍历无须类型转换
}
5.Dictionary<k.v>和Hashtable的对比
相同点:
1.都通过Key获取Value
2.添加元素方法相同Add(Object Key,Object Value)
3.删除元素方法相同 Remove(Object Value)
4.遍历方法相同foreach
不同点:
Dictionary<k.v>:对保存元素进行类型约束。
Hashtable:可以增加任何类型
Dictionary<k.v>:添加/读取值类型元素无须装箱,拆箱。
Hashtable::添加/读取值类型元素需要拆箱,装箱。
遍历Dictionary还可以采用:
foreach(KeyValuePair<string,SE> en in ht)
{
cw(en.Key);
cw(en.Value.Name);
}.
6.泛型类(重点)
语法:
public class 类名<T>
{
//...
}
T代表数据类型。可以是基本数据类型,类类型。
泛型类相当于 一个口袋,它支持任意的数据类型,这种数据类型在程序运行时确定。
泛型优点:
1.性能高。普通集合的数据需要装箱和拆箱的操作,而泛型无须类型的转换操作。
2.类型安全。泛型结婚对它存储的对象进行类型的约束,不是它所允许存储类型是无法添加到泛型集合中的。
3.实现代码的重用。泛型就相当于模板,由于它支持任意的数据类型。开发人员不必为每种特定的数据类型编写一套方法。所以它具有极大的可重用性。泛型编程是未来的主流技术之一。