集合类
数组特点:类型统一、长度固定
集合特点:不限类型、长度可变
集合常用操作:添加、修改、移除、查找、遍历,主要从这5个方面学习
命名空间System.Coections
Arrayist:(可以看成动态数组)
可变长度数组,使用类似于数组,使用索引访问和遍历
属性Capacity:集合中可以容纳元素的个数,空间不够使,翻倍增长
属性Count:集合中实际存放的元素的个数
方法Add() 、AddRange(Icoection c) :添加
方法Remove()删除指定的元素、RemoveAt() 删除指定下标的元素:删除元素,删除后,后面的元素索引自动-1
方法Cear() :清除
方法Contains()包含 、ToArray()转为数组、Sort()排序、Reverse()反转
集合中可以存放任何类型的数据,但是无论什么类型的数据放到Arrayist中以后都变成了Object类型,所以从Arrayist中取出的数据需要类型转换、
自定义排序
方法1:让自定义类实现IComparabe接口,实现CompareTo方法;此时,使用Arrayist对象的Sort()方法即可排序
方法2:自定义比较器,让类实现IComparer接口,实现CompareTo方法;此时,使用Arrayist对象的Sort(IComparer)方法,将自定义比较器对象作为参数即可排序
Hashtabe
以键值对的形式存储数据
键不能重复
查找元素的时候速度很快,使用键进行计算哈希码,然后这个哈希码作为地址,将值数据存入
方法Add(object key,object vaue);
方法hash[“key”]:访问
方法hash[“key”]=“”:可以添加、修改
方法ContainsKey(“key”)、Contains():是否包含某个键
方法Remove(“key”):根据键删除某个项
属性Keys、属性Vaues
遍历时,项的类型是DictionryEntry
foreach执行原理(*)
想使用foreach来循环遍历某类型,这个类型必须实现了IEnumerabe接口,实现pubic IEnumerator GetEnumErator()方法
该方法返回IEnumerator类型的对象,此方法不是用来遍历,而是用来得到一个迭代器,这个迭代器才是用于遍历的对象
画图演示执行过程:如何得到迭代器,如何移动指针
foreach循环是只读的,不能用来修改数据
foreach循环式只进的,并且是一条一条循环的
泛型集合
命名空间System.Coections.Generic
带有<类型名>的类型,称为泛型
•ist<T>是Arrayist的升级版,方法类似于Arrayist
•Dictionary<K,V>是Hashtabe的升级版,方法类似于Hashtabe
•以后用到集合时,推荐使用泛型集合
T,K,V就像一把锁,锁住集合只能存某种特定的类型,这里的T,K,V也可以是其它字母
泛型集合可以进行foreach遍历,是因为实现了IEnumerabe<T>具有了GetEnumerator()方法
示例:
ist<int> 这个表示该类型是一个存储int类型的集合
Dictionary<string, Person> 表示用字符串作为键,用Person作为值的集合