.Net学习 第2季05 C#面向对象 ArrayList Hashtable List<> Dictionary<>

.Net 视频学习第2季 C#面向对象

 

面向对象 ArrayList Hashtable List<>

数组:类型单一(除非是父类数组,子类对象作元素---注意元素还是被认为是父类对象!),长度固定

int[] a = new int[10];

集合:命名空间System.Collections

ArrayList list = new ArrayList();

往集合里边添加数据

list.Add(1);

对同一个集合,可以往里边添加任意类型的数据。(注意Add()方法的输入参数是object类,是所有类型的基类)

ArrayList没有Length属性,不过有Count属性,本质一样。

int a =list.Count;

从上边可以看出集合至少比数组在两方面有优势,第一是不用考虑元素类型是否一致,第二是不用考虑长度问题。

再次强调一点,Add()放进集合的元素都会被视作object类的对象,而不是元素本身的类的对象!!

(放数据很爽,用数据很苦逼————要数据类型转换)

往集合添加数据(集合类型)的另一个方法:AddRange(),添加的时候就已经知道是集合类型,注意不是整个数组当成一个元素!

 

list.Add(1);
int[] a = new int[]{1,2,3} list.AddRange(a);

 

清空:list.Clear();

清除某一项:list.Remove(X); 删除集合list中第一个X

通过下标清除某一项:list.RemoveAt(int a);

删除一个下标范围内的项:list.RemoveRange(int a, int b); a是删除的第一个项的下标,b是清除范围的长度

集合元素顺序反转:list.Reverse(); 注意,如果集合类型通过AddRange()作为元素放在集合中,集合reverse连这个元素内部的数据都会反转

插入元素:list.Insert(int a, X); 在下标a处插入数据X

插入集合:list.InsertRange(int a, L);

判断是否有某元素:list.Contains(X);  和Add()配合使用往集合添加元素

 

count属性:当前元素个数

capcity属性:可容纳的元素个数

当count大于capcity时,向内存申请多一倍的空间(开辟新空间两倍于原空间,复制数据,销毁原空间)

所以要注意,往空集合添加元素时不要用list.Count作为循环判断,因为刚刚new出来的ArrayList,Count和Capcity都是0。

 

Hashtable 键值对 Key-Value

Hashtable ht = new Hashtable();
ht.Add(Key,Value);
if (ht.ContainsKey(Key))
{
    Console.WriteLine(ht[Key]);
}

ht.Add(Key,Value); --- 添加键值对

ht.ContainsKey(Key) --- 是否包含某键

ht[Key] --- 访问与某键相对应的值

 

=====================================================================================================================

ArrayList对集合长度没有限制,元素类型没有限制,但是访问时都是object类型,不方便,采用泛型集合来限制元素类型(保留了对长度无限制的好处,访问时也方便,不需要做强制转换)

强制转换有继承关系的值类型到引用类型(object)可能发生装箱过程,反过来则可能发生拆箱过程,都会影响系统性能,所以要尽量避免使用ArrayList(ArrayList的元素均是object)

List<int> l = new List<int>();

其方法与ArrayList类似,同时可以转换为数组(反过来也有array转为list的方法ToList())

int[] iArray = l.ToArray();

 

类似于ArrayList与List<>,Hashtable也有限制键/值类型的集合 --- Dictionary<>

Dictionary<int,string> dic = new Dictionary<int,string>();

其方法与Hashtable类似。

 

var表示推断类型,常与foreach配合使用,适用于不知道元素类型的情况

foreach(var item in dic.Keys)
{
    Console.WriteLine("dic[item]");
}

成对访问 KeyValuePair

foreach(KeyValuePair<int,string> kv in dic)
{
    Console.WriteLine("{0}---{1}",kv.Key,kv.Value);
}

 

posted @ 2014-12-05 17:08  Cyrus Ho  阅读(260)  评论(0编辑  收藏  举报