1.集合概念
集合可以动态扩容
2.ArrayList
类似于数组,也有人称它为数组列表,ArrayList可以动态维护.ArrayList的容量可以根据需要自动扩充,它的索引会根据程序的扩展而重新进行分配和调整,ArrayList提供了一系列方法对其中的元素进行访问,增加和删除操作.
索引从0开始
ArrayList类属于System.Collections命名空间,这个命名空间包含接口和类,这些接口和类定义各种对象的集合.ArrayList就属于集合的一种,因此,在使用ArrayList类之前一定要引入System.Collections命名空间
属性名称 | 说明 | |
Count | 获取ArrayList中实际包含的元素数 | |
返回值类型 | 方法名称 | 说明 |
int | Add(Object value) | 将对象添加到ArrayList的结尾处 |
void | RemoveAt(int index) | 移除ArrayList制定索引的元素 |
void | Remove(Object value) | 从ArrayList中移除特定对象 |
void | Clear() | 从ArrayList中移除所有元素 |
1)给ArrayList添加数据
通过Add()方法添加元素
返回值是int类型,用于返回所添加的元素的索引
参数:ArrayList中的所有元素都是对象的引用(如,Object引用类型)
2)存取ArrayList中的单个元素
ArrayList获取一个元素的方法和数组是一样的,也是通过索引(index)来访问,ArrayList中第一个元素的索引是0.需要注意的是,由于给ArrayList添加的元素都会被转换为Object型,所以在访问这些元素的时候必须把它们转换回原来的数据类型
3)遍历ArrayList中的元素
使用for循环或者foreach循环
4)删除ArrayList中的元素
Remove()方法和RemoveAt()方法只能删除一个元素,而Clear()方法可以删除集合中的所有元素
5)判定某个元素是否在集合中
使用.Contains()方法
6)在某个位置添加新的元素
.Insert(index,"元素");
#region 01.集合使用 ArrayList list = new ArrayList(); //1.1 扔数据进去 逻辑思维 list.Add("罗振宇===时间的朋友===跨年演讲"); list.Add("前HP CEO 卡莉·菲奥莉娜 康柏"); list.Add("王鸿 ====曾经的网红===那些年,粉丝也是 过亿的!!!!"); 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
常用属性及方法:
★对HashTable遍历三种方案:
☆:第一种方式,遍历所有的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)
简单示例代码:
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可以对集合中元素类型进行约束
3.泛型集合Dictionary<K,T>
代替Hashtable
命名空间:System.Collection.Generic
语法:
Dictionary<K,V> 对象名 = new Dictionary<K,V> //“<K,V>”中K表示集合中Key的类型,V表示Value的类型