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

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

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

集合:

集合和数组的区别:

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");
 

你可能感兴趣的:(栈,队列,ArrayList,哈希表,休闲)