我在北京写代码 写出心中悲与喜 写出人间的悲欢离合 欢迎阅读 我的第三章 使用集合组织相关数据(泛型集合)
ArrayList arry = new ArrayList();
arry.Add("小明");
arry.Add("小D");
arry.Add("小B");
arry.Insert(2,"小狗");
arry.Remove("小狗");
arry.RemoveAt(0);
arry[0]="小明哥";
bool ic = arry.Contains("菊花");
if (ic)
{
Console.WriteLine("这是abc");
}
else
{
Console.WriteLine("这是cba");
}
foreach (var item in arry)
{
Console.WriteLine(item);
}
//seF se = new seF();
ArrayList a = new ArrayList()
{
new seF(){name="sb"},
new seF(){name="ccc"},
};
System.Collections命名空间
实例化ArrayList对象。
ArrayList engineers =new ArrayList();
ArrayList engineers =new ArrayList(5);[可以指定长度]
se engineers =(se) engineers [0];
Hashtable添加元素
Hashtable enginess = new Hashtable();
engineers.Add(Key,Value);
集合概述
1.集合:一个动态维护2长度的数组
ArrayList集合
2.可维护动态长度的集合
01.ArrayList:
一个可动态维护长度的集合
02.集合结构
001.下标从0开始
002.元素的类型是Object类型
03.初始化
001.引用System.Collections命名空间,实例化ArraysList对象
002.集合可以指定初始容量,也可以不指定
0001.不指定容量的情况下默认长度为0
3.基本操作
01.Add()
集合名.Add(需要添加的元素)
集合尾部追加元素
*集合中添加值类型的元素时,会执行装箱处理
02.Insert()
集合名.Insert(下标位置,添加的元素)
集合中插入元素
03.Count
集合名.Count
获取集合中的元素数量
04.删除元素
001.Remove(对象名)
语法:ArraysList名.Remove(对象名)
*删除指定对象名的对象
*没有相应的对象名是不会出现异常
002.RemoveAt(下标)
语法:ArraysList名.RemoveAt(对象名)
*删除指定索引的对象
*没有相应的下标时会出现异常(集合越界)
003.Clear()
语法:ArraysList名.Clear(对象名)
*删除集合内的所有元素
05.Contains()
语法:集合名.Contains(元素名)
判断集合中是否有相应的元素,返回布尔类型
4.集合初始化器
01.C#3.0语言的新特性之一
02.由系统元素初始化器构成,包围在“{”和“}”之间,并使用逗号进行分割
语法:
ArrayList arr = ArrayList()
{
1,5,new SE(){"帅帅",12,"男"}
};
*结尾不使用任何符号,但大括号后需要用英文符号结尾
*在初始化器中可以添加任何类型的元素
5.访问ArraysList单个元素
语法:
ArraysList(集合名)[index(访问的下标)]//按指定索引(下标)取得对象
6.访问ArraysList中所有元素
*使用循环实现
Hashtable
1.集合
01.动态可维护长度
02.可通过关键字检索
2.HashTable通常称为哈希表
01.根据键(Key)可以查询到相应的值(Value)
*键和值一一对应
02.Key值不可重复
3.使用HashTable
01.给HashTable添加元素
HashTable hash = new Hashtable();
Add(Key,Value);
02.获取HashTable的元素
SE se1 = (SE) hash["key"];//通过key获取元素(需要类型转换)
se1.Show();
*没有找到相应的key是返回一个null
03.删除HashTable的元素
hash.Remove("key");//通过key删除元素
*如没有相应的key,不会出现异常
04.清空HashTable中所有元素
hash.Clear();//清空所有
4.遍历HashTable
*遍历HashTable通过foreach循环
01.遍历键和值
foreach(DictionaryEntry ob in hash)
{
Console.WriteLine((stirng)ob);
SE se = (SE)ob;
Console.WriteLine(se.Name);
}
02.遍历键
foreach(Object ob in hash.Keys)
{
Console.WriteLine((string)ob);
}
03.遍历值
foreach(Object ob in hash.Values)
{
SE se = (SE)ob;
Console.WriteLine(se.Name);
}
泛型和泛型集合
1.使用List<T>(泛型集合)
*<T>尖括号中的参数是集合所能添加的类型
*若添加别的类型的参数会出现异常
2.List<T>基本操作
01.命名空间:System.Collections.Generic;(一般情况下编译器自动导入)
*基本的操作跟ArrayList相同
3.什么是泛型集合
01.泛型<T>最常见的用途是创建集合类
02.泛型集合可以约束集合内的元素类型
03.经典泛型集合List<T>、Dictionary<K,V>
*<T>、<K,V>表示该泛型集合中的元素类型
04.泛型集合不会用到装箱和拆箱
04.List<T>与ArrayList的对比
01.不同点
001.List<T>:添加元素时类型严格检查。而ArrayList:可以增加任何类型
002.List<T>:添加和读取值类型元素时,无需装箱拆箱。而ArrayList:添加和读取值类型元素时,需要装箱拆箱
Dictionary
1.Dictionary<K,V>通常称为字典
01.<K,V>约束集合中元素类型
02.编译时查询类型约束
03.无需装箱、拆箱操作
*操作与HashTable操作类似
2.<K,V>
01.在Dictionary中<K,V>是自定义的
02.K:
001.K不能重复
002.K不能为空
003.通过K访问元素时:如没有相应的K,系统会报错
004.通过K删除元素时:如没有相应的K,系统不会报错
3.遍历Dictionary
01.循环遍历时跟HashTable相似,不需要进行类型转换
02.遍历键和值
foreach(KeyValuePair<string,SE> ob in hash)
{
Console.WriteLine((stirng)ob);
SE se = (SE)ob;
Console.WriteLine(se.Name);
}
*遍历键和值时循环类型使用KeyValuePair
*后边的尖括号中添加相应类型的K,V
4.Dictionary<K,V>与HashTable的对比
1.不同点
001.Dictionary<K,V>:增加元素时类型严格检查。而HashTable:可以增加任何元素
002.Dictionary<K,V>:无序装箱拆箱。而HashTable:需要装箱和拆箱
02.相同点
001.通过Key获得Value
002.添加对象方法相同
003.遍历方法相似,遍历键和值的时候使用的循环类型不通过
泛型
1.泛型
01.操作的数据类型被定义为一个参数
2.泛型类
public class 类名<T>
{
//......
}
*T指类型参数,代表具体的数据类型,可以是类类型,也可以是基本数据类型
3.泛型的重要性
01.实现代码重用,未来的主流技术
01.泛型相当于模板,支持所有的类型。使开发者不用为某种类型写特定的方法
02.性能高,避免繁琐的装箱拆箱
03.提供了更好的类型安全性
01.有相应的类型约束,不用进行装箱拆箱。
04.CLR支持泛型
001.CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。CLR存在两种不同的翻译名称:公共语言运行库和公共语言运行时。