您的位置:首页 > 编程语言 > C#

c#之旅--第五天(集合)

2011-07-19 10:58 218 查看
昨天有些松懈,甚至觉得自己不该来学这个,对此狠狠的反省自己,既然选择了就要坚持,要相信自己能够做到。

昨天学了集合,当老师让用堆栈实现五子棋的悔棋功能时自己一点头绪都没有,发现自己就是不怎么爱动脑子。以后一定要多想想程序的思想,还有就是欠缺的知识尽快不上来。

集合:

集合和数组的区别:

1.集合是变长的数组是定长的。

2.集合的元素的存和取是有顺序的,数组元素的存取只能用下标。

动态数组,队列,堆栈,哈希表,泛型的哈希表

动态数组:ArrayList

定义方式:

ArrayList al=new ArrayList();

ArrayList a=new ArrayList(new int[]{1,2,3});

ArrayList a2=new ArrayList(4);

1.ArrayList 是一个类,可以用new一个对象来实例化 ,用对象名来调用方法。

2.ArrayList中的常用方法:

通过Add()方法来追加元素,也可以用小标来给已有的元素赋值但不能用来追加元素.例:al.Add(1);这里 add是个Object类型 这里发生了隐式装箱。

Remove()方法用来移除元素 参数即为要移除的元素。

RemoveAt()方法用来移除某一位置上的元素 参数为下标。

Sort()将集合中的元素快速排序。

Reverse()将集合中的元素的顺序反转。

al.RemoveRange(0,2);//移除从第一个元素到第三个元素指间的所有元素.

al.Insert(2,10);//将10插入到第三个位置上,第三个位置往后的元素都后移.

3.常用属性:

获取任何数组的长度用.Length属性 获取任何集合的长度用.Count属性。

查看集合的容量用Capacity属性,集合的容量可以在实例化的时候声明。

如ArrayList al = new ArrayList(4);//ArrayList是一个类,可以new 如果给一个参数表示的容量,一旦设置了容量就按数组元素的容量来翻倍 如是1则下一个事2在下一个是4...

但是如果没有事先声明就按集合中元素小于4的话容量就是4,若超过4个就开始翻倍为8,以此类推。

遍历集合:

foreach(object i in al)

{

Console.WriteLine(i);

}

for(int i=0;i<al.Count;i++)

{

Console.WriteLine(al[i]);

//Console.WriteLine("类型:{0}", al[i].GetType().Name);//取元素类型

//Console.WriteLine("值为:{0}", al[i]);//取元素的值

}

ArrayList 里面也可以放数组 ,可以考虑用于修改自动售货机代码。

List<>:泛型:集合中数据的类型都是object,这样在为集合赋值时就回发生装箱操作。而泛型List把类型当参数,在分配内存时其数据类型已经确 定,相比集合AarryList大大地提高了性能,除此之外二者非常相像,AarryLis的一些方法List一样都适用,所以有了泛型List编程上

一般不采用AarryList。例如:可以定义一个结构体,用它来当作集合List的类型

List<int> list = new List<int>();//泛型:把数据类型当参数,避免装箱拆箱

list.Add(2);//用什么类型传递参数就是什么类型

Console.WriteLine(list[0]);

动态数组的泛型和动态数组的方法差不多,只是Add()放法所添加的是

堆栈:放和取有顺序,先进后出

//栈,可以放元素,但是放和取有顺序,先进后出

Stack st = new Stack();

st.Push(1);

st.Push(2);

遍历一个栈:

foreach (object obj in st)

{

Console.WriteLine(obj);

}

Console.WriteLine(st.Pop());//把栈中最顶层的元素取走,既看又取

Console.WriteLine(st.Peek());//只看不取。

st.Clone();//克隆一个副本

Console.WriteLine("元素数" + st.Count);

//堆栈的泛型

Stack<int> st1 = new Stack<int>();

st1.Push(3);

st1.Push(4);

foreach (int i in st1)

{

Console.WriteLine(i);

}

队列:先进先出

//队列 先进先出

Queue qu = new Queue();

qu.Enqueue(5);

qu.Enqueue(6);

队列的遍历:

foreach(object o in qu)

{

Console.WriteLine(o);

}

Console.WriteLine( qu.Peek());//取最先进的那个元素

Console.WriteLine( qu.Dequeue());//既看又取走

Console.WriteLine("元素个数为:"+qu.Count);

队列泛型:

Queue<int> qul = new Queue<int>();

qul.Enqueue(11);

qul.Enqueue(12);

foreach (int a in qul)

{

Console.WriteLine(a);

}

哈希表:

//哈希表 ,既有键又有值 适合整个对象中有唯一性,因为它的键是唯一的

Hashtable ht = new Hashtable();

ht.Add(1001, new Student { Name="aaa",Age=30});//可以根据键来取值,键和值时唯一对应的 键不能重复。

ht.Add(1,"11111");

ht.Add(2,"22222");

ht.Add("1","333333");

Console.WriteLine(ht[1]);

Console.WriteLine(((Student)ht[1001]).Name);

foreach(object o in ht.Keys)

{

Console.WriteLine(((Student)ht[o]).Name);

}

//哈希表的泛型

Dictionary<int,string> dic=new Dictionary<int,string>();//两个参数,一个存储键,一个存储值,键和值都有准确的类型

dic.Add(1,"aaa");

dic.Add(3,"bbb");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息