一.集合概述
特点:可动态扩容
1.ArrayList(数组列表)
类似于数组,可动态维护
命名空间:System.Collections
此命名空间包含接口和类。这些接口和类定义各种对象的集合
1.ArrayList常用方法及属性
属性名称 | 说明 | |
---|---|---|
Count | 获取ArrayList中实际包含的元素数 | |
Capacity | 获取ArrayList的容量 | |
返回值类型 | 方法名称 | 说明 |
int | Add(Object value) | 将对象添加到ArrayList的结尾处 |
void | RemoveAt(int index) | 移除ArrayList指定索引处的元素 |
void | Remove(Object value) | 从ArrayList中移除特定的对象 |
void | Clear() | 从ArrayList中移除所有元素 |
bool | Contains(Object value) | 判断ArrayList中是否包含特定对象 |
void | Insert(int index,Object value) | 添加元素到ArrayList中的指定下标 |
示例代码:
#region 01.集合使用
ArrayList list = new ArrayList();
//1.1 扔数据进去 逻辑思维
list.Add("罗振宇===时间的朋友===跨年演讲");
list.Add("前HP CEO 卡莉·菲奥莉娜 康柏");
list.Add("隔壁老王");
list.Insert(1,"我是老二吧!");
Console.WriteLine("集合中元素总量"+list.Count);
Console.WriteLine("集合中集合容量" + list.Capacity); //容量
//1.2 遍历集合
foreach (string item in list) //自动迭代 有一个迭代器
{
Console.WriteLine(item);
}
//1.3 删除数据
//方式一:下标
// list.RemoveAt(0);
//方式二:根据内容删除
list.Remove("罗振宇===时间的朋友===跨年演讲");
Console.WriteLine("==========删除后===============");
foreach (string item in list) //自动迭代 有一个迭代器
{
Console.WriteLine(item);
}
//判定某个元素 是否在集合中
bool flag=list.Contains("李小龙");
if (flag)
{
Console.WriteLine("Exists");
}
else
{
Console.WriteLine("Not Exists");
}
#endregion
2.通过集合初始化器(Collection Initializers)构造集合
通过集合初始化器,无须在代码中指定多个对该类Add()方法的调用,编译器会添加这些调用,从而节省了很多的编码工作
示例代码:
#region 02。集合初始化器
ArrayList list2 = new ArrayList() //集合初始化
{
new SE(){Name="张靓颖",Age=20}, //对象初始化器
new SE()
};
#endregion
2.Hashtable(双列集合)
通常称为:哈希表,它的每个值都是一个键/值对
命名空间:System.Collections
常用属性及方法:
属性名称 | 说明 | |
---|---|---|
Count | 获取包含在Hashtable中键/值对的数目 | |
Keys | 获取包含在Hashtable中键的集合 | |
Values | 获取包含在Hashtable中值的集合 | |
返回值类型 | 方法名称 | 说明 |
void | Add(Object key,Object value) | 将代言指定键和值的元素添加到Hashtable中 |
void | Remove(Object key) | 从Hastable中移除带有指定键的元素 |
void | Clear() | 从Hastable中移除所有元素 |
☆:第一种方式,遍历所有的keys,通过key的值获取value
☆:第二种方式:遍历所有的value集合
☆:第三种方式,同时遍历key和value
示例代码:
#region 01.双列集合HashTable(哈希表)
Hashtable table = new Hashtable(); //table中的一个item=key+value
table.Add("ICBC", "工商银行");
table.Add("ABC", "农业银行");
table.Add("CBC","中国建设银行");
//根据key获取value
Object bankName=table["ICBC"];
Console.WriteLine(bankName);
Console.WriteLine("===============================");
//遍历的手段
//foreach for 因为HashTable 只有key没有索引,for 通过下标取值
//Value 方式一:通过Key取出Value
foreach (Object key in table.Keys)
{
Console.WriteLine(key);
//索引器
Console.WriteLine(table[key]);
}
//直接Value,如果我们能拿到所有值的集合 。
foreach (Object value in table.Values)
{
Console.WriteLine(value);
}
//key+value 迭代 ,一次拿到的是key+value的组合
foreach (DictionaryEntry item in table)
{
//Console.WriteLine("");
Console.WriteLine(item.Key);
Console.WriteLine(item.Value);
}
#endregion
3.集合扩充原理:(Cpcity)
初始状态,容量为0
开始出现,容量为4
每次超过当前容量,容量为(当前容量*2)
扩容的触发时机是在调用Add()方法的时候
简单示例代码:
int[] nums = new int[0];
int num = (nums.Lentght==0)?4:(nums.Lenght*2);
二.泛型和泛型集合
1.泛型
引入概念:集合参数类型
可以最大限度地重用代码,保护类型的安全及提高性能
List<T>,Dictionary<K,V>
#region 01.泛型集合先导课程
PM pm = new PM();
SE s1 = new SE();
SE s2 = new SE();
ArrayList list = new ArrayList();
list.Add(pm);
list.Add(s1);
list.Add(s2);
foreach (Object item in list)
{
}
//PM pmResult=(PM)list[0];
//SE seResult1 = (SE)list[1];
//SE seResult2 = (SE)list[2];
#endregion
2.泛型集合List<T>
代替ArrayList
命名空间:System.Collection.Generic
语法:
List<T> 对象名 = new List<T>();
//“<T>”中T可以对集合中元素类型进行约束
示例代码:
#region 02.泛型集合
//<真实类型> 限定 Add()入参的类型
List<SE> list = new List<SE>();
SE se=new SE();
se.Name = "比尔·盖茨";
SE se2 = new SE();
se2.Name = "李彦宏";
list.Add(se);
list.Add(se2);
foreach (SE item in list)
{
Console.WriteLine(item.Name);
}
#endregion
3.泛型集合Dictionary<K,T>
代替Hashtable
命名空间:System.Collection.Generic
语法:
Dictionary<K,V> 对象名 = new Dictionary<K,V>
//“<K,V>”中K表示集合中Key的类型,V表示Value的类型
废话不多说,上代码:
#region 03.双列集合 Dictionay<K,V>
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("ICBC","中国工商银行");
dic.Add("ABC", "中国农业银行");
dic.Add("CBC", "中国建设银行");
//找一下 EBank 有没有在集合中
bool flag=dic.ContainsKey("EBank");
if (flag)
{
Console.WriteLine("存在");
}
else
{
Console.WriteLine("不存在");
}
//双列集合遍历方案
//方式一:
foreach (string key in dic.Keys)
{
Console.WriteLine(key);
Console.WriteLine(dic[key]);
}
//方式二;直接获取Value
foreach (string value in dic.Values)
{
Console.WriteLine(value);
}
//方式三:key+value =======item
foreach (KeyValuePair<string,string> item in dic)
{
Console.WriteLine(item.Key);
Console.WriteLine(item.Value);
}
#endregion
KeyValuePair<TKey,TValue>是一个泛型结构,定义可设置或检索的键/值对。这部分就不多做结束,大家可以通过MSDN了解
★注:泛型集合可以作为类的一个属性,使用泛型集合必须实例化~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~