乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C# 數(shù)據(jù)容器詳解:Array、List、Dictionary、LinkedList、Queue、Stack

       黃金屋1 2022-06-05 發(fā)布于北京

      前言

      在Unity有一個與數(shù)據(jù)容器息息相關(guān)的命名空間:System.Collections.Generic,其包含用于定義泛型集合的接口和類,可允許用戶創(chuàng)建強(qiáng)類型集合,以提供比非泛型強(qiáng)類型集合更好的類型安全性和性能

      本篇博客用來介紹這些通過泛型實現(xiàn)的安全類型的數(shù)據(jù)容器(ArrayList是一個例外),話不多說,直接開始


      Array

      特點:

      數(shù)組是一種線性結(jié)構(gòu),需要聲明長度
         通過下標(biāo)查找時間復(fù)雜度為O(1)
         插入刪除比較復(fù)雜

      常用屬性:

      • Length:獲取出數(shù)組所有維度的長度

      • Rank:獲取數(shù)組的維度

      方法:

      • Clear(Array, Int32, Int32):在指定數(shù)組的某一范圍將數(shù)組恢復(fù)為默認(rèn)值(比如整數(shù)數(shù)組歸零)

      • Sort(Array):對于數(shù)組中的元素進(jìn)行排序

      • Clone():創(chuàng)建Array副本

      • GetType():獲取當(dāng)前數(shù)組實例的Type

      • Initialize():通過調(diào)用值類型的無參數(shù)構(gòu)造函數(shù),初始化值類型 Array 的每一個元素

      • Reverse(Array):反轉(zhuǎn)數(shù)組中元素的順序

      使用方式:

      通過下面的代碼來理解一些關(guān)鍵屬性方法的使用方式:

      int[] nums = new int[] { 2, 7, 11, 15 };
      
              //leangth來獲取數(shù)組的長度
              Console.WriteLine(nums.Length);
      
              //對數(shù)組中元素進(jìn)行排序
              Array.Sort(nums);
      
              //反轉(zhuǎn)數(shù)組中元素的順序
              Array.Reverse(nums);
             
      
              //復(fù)制nums數(shù)組
              int[] nums_Copy = (int[])nums.Clone();
      
              //清除數(shù)組元素,將nums中所有元素變?yōu)?
              Array.Clear(nums, 0, nums.Length);
      
              //同樣將數(shù)組中元素恢復(fù)默認(rèn)
              nums.Initialize();

      ArrayList

      ArrayList核心是數(shù)組,但是是在數(shù)組的基礎(chǔ)上進(jìn)行了擴(kuò)展,首先就是其動態(tài)擴(kuò)容的特點,然后再一定程度上同日出生了其查詢速度

      ArrayList的使用需要引入命名方法:using System.Collections;

      特點:

      • 可以動態(tài)擴(kuò)容:通過創(chuàng)建一個更大的新數(shù)組,來將原來的數(shù)組轉(zhuǎn)移到新數(shù)組

      • 插入刪除比數(shù)組方便

      • 類似于數(shù)組,同樣通過下標(biāo)索引

      存儲的是對象:

      • 需要裝箱、拆箱操作

      • 是不安全類型

      注意

      • 裝箱:將值類型轉(zhuǎn)換為引用類型(隱式轉(zhuǎn)換)

      • 拆箱:將引用類型轉(zhuǎn)換為值類型(顯式轉(zhuǎn)換)

      屬性

      • Capacity:獲取或者設(shè)置ArrayList中可以包含的元素個數(shù)

      • Count:獲取ArrayList中實際包含的元素個數(shù)

      • ArrayList[]:通過下標(biāo)索引


      方法

      • Add:添加元素在ArrayList的尾部

      • Clear:清除所有元素

      • Contains:確定某個元素是否在ArrayList內(nèi)

      • Sort:排序

      使用方式

      關(guān)于ArrayList使用方式有很多與Array相同,可以通過如下案例看出:

      //創(chuàng)建
              ArrayList m_arrayList = new ArrayList();
              
              ArrayList al = new ArrayList { 1, 2, 3, 4 };
              //元素插入
              m_arrayList.Add("001");
              m_arrayList.Add(1);
      
              //第一中遍歷方式
              for(int i=0;i<m_arrayList.Count;i++)
              {
                  Console.WriteLine(m_arrayList[i]);
              }
              //第二種遍歷方式
              foreach(Object j in m_arrayList)
              {
                  Console.WriteLine(j);
              }

      List

      List就是通過將泛型數(shù)據(jù)存儲在一個泛型數(shù)組中,從而實現(xiàn)一個數(shù)據(jù)安全類型的列表,添加元素時若超過中當(dāng)前泛型數(shù)組的容量,則進(jìn)行二倍擴(kuò)容,進(jìn)而實現(xiàn)List大小動態(tài)變化

      特點:

      核心是數(shù)組:

      • 可以動態(tài)擴(kuò)容:同樣是創(chuàng)建新的更大數(shù)組來遷移數(shù)據(jù)

      • 使用泛型來實現(xiàn)對裝箱拆箱操作的避免

      內(nèi)存優(yōu)化:

      • 對于List可以規(guī)定長度,來避免動態(tài)擴(kuò)容操作,這樣就可以避免新的內(nèi)存空間的消耗

      • 相對于ArrayList,List避免了裝箱拆箱操作,性能表現(xiàn)更好

      屬性:

      • Capacity:獲取或設(shè)置該內(nèi)部數(shù)據(jù)結(jié)構(gòu)在不調(diào)整大小的情況下能夠容納的元素總數(shù)。

      • Count:獲取 List 中包含的元素數(shù)。

      • Item[Int32]:獲取或設(shè)置指定索引處的元素。

      方法:

      • Add:添加元素在List的尾部

      • Clear:清除所有元素

      • Contains:確定某個元素是否在List內(nèi)

      • Sort:排序

      使用方式

      通過上面的屬性方法,也可以看出其使用方式于ArrayList差不多

      //創(chuàng)建一個列表,長度確定的情況下可以規(guī)定長度,減少new的產(chǎn)生
              List<int> nums = new List<int>(12);
      
      
              //向列表插入數(shù)據(jù)
              nums.Add(1);
              nums.Add(2);
      
              //遍歷列表元素
      
              for(int i=0;i<nums.Count;i++)
              {
                  Console.WriteLine(nums[i]);
              }
      
              foreach(int num in nums)
              {
                  Console.WriteLine(num);
      
              }
              //判斷某一個元素是否在列表中
              if(nums.Contains(1))
              {
                  Console.WriteLine("1在列表nums中");
              }
      
              //排序
              nums.Sort();

      HashTable

      特點

      • HashTable類似于字典,也是鍵值對的形式

      • 查詢速度快,插入速度慢

      • 容量固定,根據(jù) 數(shù)組索引獲得值

      //哈希表結(jié)構(gòu)體
      private struct bucket {
         	public Object key;//鍵
          public Object values;//值
          public int hashCode;//哈希碼
      }

      原理:

      • 不定長的二進(jìn)制數(shù)據(jù)通過哈希函數(shù)映射到一個較短的二進(jìn)制數(shù)據(jù)集,即Key通過HashFunction函數(shù)獲得HashCode

      • 但是這樣的HashCode依舊很長, 不方便索引,于是又將這些HashCode通過哈希桶算法進(jìn)行分段(一般都是取余數(shù)),這樣就會減小每一段的索引距離


      LinkedList

      特點:

      • 鏈表插入刪除方便,查找相對于數(shù)組來說比較慢

      • 為了解決線性表的刪除問題,對于數(shù)組,列表,數(shù)組列表插入刪除是很復(fù)雜的一件事,而鏈表則不需要對于其進(jìn)行遍歷,即可實現(xiàn)其遍歷過程

      • 鏈表通過遞歸實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)

      其屬性方法:

      屬性:

      • Count:包含的節(jié)點數(shù)

      • First:獲取鏈表的第一個節(jié)點

      • Last:獲取鏈表的最后一個節(jié)點

      方法:

      • AddFirst(T):開頭處添加指定值的節(jié)點

      • AddLast(T):結(jié)尾處添加指定的節(jié)點

      • Clear():移除所有的節(jié)點

      • Contains(T):判斷是否包含某一個值

      • FInd(T):查找包含值的第一個節(jié)點

      • FIndLast(T):查找包含值的最后一個節(jié)點

      • Remove():移除指定值的第一個匹配項

      • RemoveFirst():移除位于開頭的節(jié)點

      • RemoveLast():移除位于結(jié)尾處的節(jié)點



      Dictionary

      Dictionary<TKey,TValue>泛型類提供一組鍵到一組值的映射。 每次對字典的添加都包含一個值和與其關(guān)聯(lián)的鍵。 使用其鍵檢索值的速度非???,接近 O (1) ,因為 Dictionary<TKey,TValue>該類是作為哈希表實現(xiàn)的

      字典在C#中是一種很常用的數(shù)據(jù)容器,在Unity中有很多的應(yīng)用場景,尤其是框架階段,如下:

      • 事件管理器

      • UI界面管理器

      • 有限狀態(tài)機(jī)

      • 資源加載器

      • 對象池

      特點:

      • 索引方便,時間復(fù)雜度接近O(1)

      • 是安全類型

      • 鍵唯一

      屬性:

      • Count:獲取字典中包含的鍵值對的個數(shù)

      • Keys:獲取字典中包含鍵的集合

      • Values:獲取字典中包含的值的集合

      方法:

      • Add(Key,Value):添加鍵值對

      • Clear():移除字典中所有鍵值對

      • ContainsKey(Key):判斷字典中是否有該鍵

      • ContainsValue(Value):判斷字典中是否有該值

      • Remove(Key):從字典中移除指定鍵的值

      • Remove(Key,Value):從元素中移除指定鍵的值,并復(fù)制給Value

      • TryAdd(Key,Value):嘗試將鍵值對插入到字典中,如果成功則返回True

      使用方式:

      關(guān)于字典的使用方式還是比較復(fù)雜的,主要是兩個變量以及兩者之間的對應(yīng)關(guān)系的理解

      //創(chuàng)建一個字典
              Dictionary<string, string> peoples = new Dictionary<string, string>();
      
      
              //插入鍵值對
              if(!peoples.ContainsKey("小明"))
              {
                  peoples.Add("小明", "男");
                  peoples.Add("小紅", "女");
              }
      
              //遍歷字典中所有的鍵,同樣可以遍歷所有的值
              Dictionary<string,string>.KeyCollection keys = peoples.Keys;
              foreach(string s in keys)
              {
                  Console.WriteLine(s);
              }
      
              //遍歷字典并輸出鍵和值
              foreach (KeyValuePair<string, string> kv in peoples)
              {
                  Console.WriteLine(kv.Key);
                  Console.WriteLine(kv.Value);
              }
      
              //修改鍵值對的值
              if (peoples.ContainsKey("小明"))
              {
                  peoples["小明"] = "女";
              }
      
              //刪除鍵值對
              if (peoples.ContainsKey("小明"))
              {
                  peoples.Remove("小明");
              }

      Queue

      隊列的特點是先進(jìn)先出,主要是應(yīng)用在一些特殊的場景,需要實現(xiàn)數(shù)據(jù)的一個先進(jìn)先出的效果

      特點:

      • 先進(jìn)先出

      屬性:

      • Count:獲取 Queue<T>中包含的元素數(shù)
        方法:

      • Clear():從 Queue<T>中移除所有對象。

      • Contains(T):確定某元素是否在Queue<T>中。

      • CopyTo(T[], Int32):從指定數(shù)組索引開始將Queue<T>元素復(fù)制到現(xiàn)有一維Array中。

      • Dequeue():移除并返回位于Queue<T>開始處的對象。

      • Enqueue(T):將對象添加到 Queue<T>的結(jié)尾處。

      Stack

      特點:

      • 先進(jìn)后出

      • 底層數(shù)組,兩倍動態(tài)擴(kuò)容

      屬性:

      • Count:獲取 Stack 中包含的元素數(shù)。

      方法

      • Clear(): 從 Stack<T>中移除所有對象。

      • Contains(T):確定某元素是否在Stack<T>

      • Peek():返回位于 Stack<T>頂部的對象但不將其移除。

      • Pop():刪除并返回Stack<T>頂部的對象。

      • Push(T):在 Stack<T>的頂部插入一個對象。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多