天天看點

C#進階01——簡單資料結構類1.ArrayList 2.Stack3.Queue4.Hashtable1.Hashtable的本質

1.ArrayList

1.ArrayList的本質

ArrayList是一個C#為我們封裝好的類

它的本質是一個object類型的數組

ArrayList類幫助我們實作了很多方法

比如數組的增删查改

2.申明

需要引用命名空間 using System.Collections;

ArrayList array = new ArrayList();

3.增删查改

1.增

array.Add(1);
            array.Add("123");
            array.Add(true);
            array.Add(new object());
            array.Add(new Test());
            array.Add(1);
            array.Add(true);
 
            ArrayList array2 = new ArrayList();
            array2.Add(123);
            //範圍增加 (批量增加 把另一個list容器裡面的内容加到後面)
            array.AddRange(array2);
 
            //插入元素 (位置,插入内容)
            array.Insert(1, "123456");
            Console.WriteLine(array[1]);//123456
           

2.删

//移除指定元素 從頭找 找到就删
            array.Remove(1);
            //移除指定位置的元素
            array.RemoveAt(2);
            //清空
            //array.Clear();
           

3.查

//得到指定位置的元素
            Console.WriteLine(array[0]);
            //檢視元素是否存在
            if (array.Contains("123"))
            {
                Console.WriteLine("存在123");
            }
            //正向查找元素位置
            //找到的傳回值 是位置 找不到 傳回值就是-1
            int index = array.IndexOf(true);
            Console.WriteLine(index);//1
            index = array.IndexOf(false);
            Console.WriteLine(index);//-1
 
            //反向查找元素位置
            //傳回是從頭開始的索引數
            index = array.LastIndexOf(true);
            Console.WriteLine(index);//4
           

4.改

Console.WriteLine(array[0]);
            array[0] = "999";
            Console.WriteLine(array[0]);
           

 5.周遊

//長度
            Console.WriteLine(array.Count);//7
            //容量
            //避免産生過多的垃圾
            Console.WriteLine(array.Capacity);//16
            Console.WriteLine("*******************");
            for (int i = 0; i < array.Count; i++)
            {
                Console.Write(array[i]);
            }
            Console.WriteLine("");
 
            //疊代器周遊
            foreach (object item in array)
            {
                Console.Write(item);
            }
           

4.裝箱拆箱

ArrayList本質上是一個可以自動擴容的object數組

由于用萬物之父來存儲資料,自然存在裝箱拆箱

當往其中進行值類型存儲時就是在裝箱,當将值類型對象取出來轉換使用時,就是在拆箱

是以ArrayList盡量少用,之後我們會學習更好的資料容器

int k = 1;
            array[0] = k;//裝箱
            k = (int)array[0];//拆箱
           

 2.Stack

1.Stack的本質

Stack(棧)是一個C#為我們封裝好的類

它的本質也是object[]數組,隻是封裝了特殊的存儲規則

Stack是棧存儲容器,棧是一種先進後出的資料結構

先存入的資料後擷取,後存入的資料先擷取

棧是先進後出

2.申明

需要引用命名空間 using System.Collections;

Stack stack = new Stack();

3.增取查改

1.增

//壓棧
            stack.Push(1);
            stack.Push("123");
            stack.Push(true);
            stack.Push(1.2f);
            stack.Push(new Test());
           

 2.取

//棧中不存在删除的概念
            //隻有取的概念
            //彈棧
            object v = stack.Pop();
            Console.WriteLine(v);
 
            v = stack.Pop();
            Console.WriteLine(v);//1.2f
           

3.查

//1.棧無法檢視指定位置的 元素
            // 隻能檢視棧頂的内容
            v = stack.Peek();//隻檢視,不取出
            Console.WriteLine(v);
            Console.WriteLine(v);
 
            //2.檢視元素是否存在于棧中
            if (stack.Contains(1.2f))
            {
                Console.WriteLine("存在1.2f");
            }
            //無輸出
            if (stack.Contains("123"))
            {
                Console.WriteLine("存在123");
            }
            //存在123
           

4.改

//棧無法改變其中的元素 隻能壓(存)和彈(取)
            //實在要改 隻有清空
            stack.Clear();
            Console.WriteLine(stack.Count);//0
            stack.Push("1");
            stack.Push(2);
            stack.Push("哈哈哈");
           

5.周遊

//1.長度
            Console.WriteLine(stack.Count);//3
 
            //2.用foreach周遊
            //  而且周遊出來的順序 也是從棧頂到棧底
            foreach (object item in stack)
            {
                Console.WriteLine(item);
            }
 
            //3.還有一種周遊方式
            //  将棧轉換為object數組
            //  周遊出來的順序 也是從棧頂到棧底
            object[] array = stack.ToArray();
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);
            }
 
            //4.循環彈棧
            while (stack.Count > 0)
            {
                /*object o = stack.Pop();
                Console.WriteLine(o);*/
                Console.WriteLine(stack.Pop());
            }
            Console.WriteLine(stack.Count);
           

4.裝箱拆箱

由于用萬物之父來存儲資料,自然存在裝箱拆箱

當往其中進行值類型存儲時就是在裝箱

當将值類型對象取出來轉換使用時,就存在拆箱

3.Queue

1.Queue本質

Queue是一個C#為我們封裝好的類

它的本質也是object[]數組,隻是封裝了特殊的存儲規則

Queue是隊列存儲容器

隊列是一種先進先出的資料結構

先存入的資料先擷取,後存入的資料後擷取

2.申明 

需要引用命名空間 using System.Collections;

Queue queue = new Queue();

3.增取查改

1.增

queue.Enqueue(1);
            queue.Enqueue("123");
            queue.Enqueue(1.4f);
            queue.Enqueue(new Test());
           

2.取

//隊列中不存在删除概念
            //隻有取的概念 取出先加入的對象
            object v = queue.Dequeue();
            Console.WriteLine(v);//1
            v = queue.Dequeue();
            Console.WriteLine(v);//123
           

3.查

//1.檢視隊列頭部元素但不會移除
            v = queue.Peek();
            Console.WriteLine(v);//1.4
            v = queue.Peek();
            Console.WriteLine(v);//1.4
 
            //2.檢視元素是否存在于隊列中
            if (queue.Contains(1.4f))
            {
                Console.WriteLine("隊列中存在1.4f");
            }
           

4.改 

//隊列無法改變其中的元素 隻能進出隊列
            //實在要改 隻有清空
            Console.WriteLine(queue.Count);//2
            queue.Clear();
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
           

5.周遊

//1.長度
            Console.WriteLine(queue.Count);//3
            //2.用foreach周遊
            foreach (object item in queue)
            {
                Console.WriteLine(item);
            }
            //3.還有一種周遊方式
            //  将隊列轉換為object數組
            object[] array = queue.ToArray();
            for (int i = 0; i < queue.Count; i++)
            {
                Console.WriteLine(array[i]);
            }
            //4.循環出列
            while (queue.Count > 0)
            {
                Console.WriteLine(queue.Dequeue());
            }
           

4.裝箱拆箱

由于用萬物之父來存儲資料,自然存在裝箱拆箱

當往其中進行值類型存儲時就是在裝箱

當将值類型對象取出來轉換使用時,就存在拆箱

4.Hashtable

1.Hashtable的本質

Hashtable(又稱散清單)是基于鍵的哈希代碼組織起來的 鍵/值對

它的主要作用是提高資料查詢的效率

使用鍵來通路集合中的元素

2.申明

需要引用命名空間 using System.Collections;

Hashtable hashtable = new Hashtable();

3.增删查改

1.增

hashtable.Add(1, "123");
            hashtable.Add("123", 1);
            hashtable.Add(true, false);
            hashtable.Add(false, false);
            //注意:不能出現相同鍵
           

2.删

//1.隻能通過鍵去删除
            hashtable.Remove(1);
            //2.删除不存在的鍵 沒反應
            hashtable.Remove(2);
            //3.或者直接清空
            hashtable.Clear();
            hashtable.Add(1, "123");
            hashtable.Add(2, "1234");
            hashtable.Add(3, "123");
            hashtable.Add("123123", 12);
           

3.查

//1.通過鍵檢視值
            //  找不到會傳回空
            Console.WriteLine(hashtable[1]);//123
            Console.WriteLine(hashtable[4]);//傳回空
            Console.WriteLine(hashtable["123123"]);//12
 
            //2.檢視是否存在
            //  根據鍵檢測
            if (hashtable.Contains(2))
            {
                Console.WriteLine("存在鍵為2的鍵值對");
            }
            if (hashtable.ContainsKey(2))
            {
                Console.WriteLine("存在鍵為2的鍵值對");
            }
            // 根據值去檢測
            if (hashtable.ContainsValue(12))
            {
                Console.WriteLine("存在值為12的鍵值對");
            }
           

4.改 

//隻能改 鍵對應的值内容 無法修改鍵
            Console.WriteLine(hashtable[1]);
            hashtable[1] = 100.5f;
            Console.WriteLine(hashtable[1]);
           

5.周遊

//得到鍵值對 對數
            Console.WriteLine(hashtable.Count);
 
            //1.周遊所有鍵
            foreach (object item in hashtable.Keys)
            {
                Console.WriteLine("鍵:"+item);
                Console.WriteLine("值:" + hashtable[item]);
            }
            Console.WriteLine();
            //2.周遊所有值
            foreach (object item in hashtable.Values)
            {
                Console.WriteLine("值:"+item);
            }
 
            //3.鍵值對一起周遊
            foreach (DictionaryEntry item in hashtable)
            {
                Console.WriteLine("鍵:" + item.Key + " 值:" + item.Value);
            }
 
            //4.疊代器周遊法
            IDictionaryEnumerator myEnumerator = hashtable.GetEnumerator();
            bool flag = myEnumerator.MoveNext();
            while (flag)
            {
                Console.WriteLine("鍵:" + myEnumerator.Key + " 值:" + myEnumerator.Value);
                flag = myEnumerator.MoveNext();
            }
           

4.裝箱拆箱

由于用萬物之父來存儲資料,自然存在裝箱拆箱

當往其中進行值類型存儲時就是在裝箱

當将值類型對象取出來轉換使用時,就存在拆箱