数组 & ArrayList & List
数组
int []a =new int[5];
- 优势:数组在内存中是连续储存的,所以它的索引速度是非常快的,而且赋值与修改元素也很简单
- 劣势:
· 在数组的两个数据间插入数据很麻烦
· 在声明数组的时候必须声明数组长度,数组长度过长,会造成内存浪费,数组长度过短,会造成数据溢出
ArrayList
-
优势:
· ArrayList的大小是按照其中存储的数据来动态扩充与收缩的
· 在声明的时候不需要指定长度
· ArrayList可以很方便的进行数据的添加,插入和移除ArrayList array=new ArrayList(); array.Add("abc");// 将数据新增到集合结尾处 array[2]=345;// 修改指定索引处的数据 array.RemoveAt(0);// 移除指定索引的数据 array.Remove("abc");// 移除指定内容的数据 array.Insert(0,"hello");// 在指定索引处插入数据
-
劣势
· ArrayList在储存数据时使用object类型进行存储的
· ArrayList 使用的时候很可能会出现类型不匹配的错误;就算插入的时候是同类型的数据,在使用的时候也需要再次将它们转化为原类型来处理
· ArrayList 在存储存在装箱和拆箱操作,导致性能低下装箱:将来如int类型或者string等不同的对象通过隐式转换赋给object对象;
int i=123;
object o=i;
拆箱:将object对象通过显示转换赋给int类型的变量
object o=123;
int i=(int)o;
装箱和拆箱 的过程会产生较多的性能损耗
泛型-List集合
- 限制集合只能存储单一类型数据
- 在声明的时候,需要同时声明集合内的对象类型
List<int> list=new List<int>();// 声明一个int类型的集合 list.Add(123);// 将数据新增到结尾处 List<int> intlist=new List<int> { 1, 2, 3 };// 对象初始化时赋值 list[2]=345;// 修改指定索引的数据 list.RemoveAt(0);// 移除指定索引的数据 list.Remove(3);// 移除指定内容的数据 list.Insert(0,666);// 在指定索引处添加数据
Dictionary
- 在声明的时候,需要同时声明字典内键与值的类型
Dictionary<int,string> dic=new Dictionary<int,string>();
- 键与值可以是任何类型
- 键在设置的时候是唯一的,值可以不唯一
Dictionary<int,string> dic=new Dictionary<int,string>(); dic.Add(1,"10分");// Add赋值 dic[2]="20分"// 索引器赋值(可以做新增-修改),2 是键的值 Dictionary<int,string> dic=new Dictionary<int,string>() { {1,"10分"}, {2,"20分"} };// 对象初始化赋值 dic.Remove(1);// 根据键删除数据,返回bool
- Add方法不可以添加已有的键
dic.Add(1,"10分");// Add赋值 dic.Add(1,"100分");// 会报错
- 取值方式
string val=dic[1];// 索引器取值,1 是键的值
foreach(KeyValuePair<int,string> item in dic)
{
string val=item.value;
}