記錄一下Unity C#經常使用的容器,方便寫腳本時忘了容器類來查下 (- -||)數組
using System.Collections.Generic; //泛型容器的命名空間緩存
相似C++的vector<T>。安全
有另外一個很是類似的非泛型容器:ArrayList。ArrayList能夠插入不一樣的值類型,在數據檢索及存儲時存在裝箱與拆箱操做,容易帶來性能消耗。
而List<T>則能夠避免了裝箱與拆箱動做的性能耗費,並且類型更安全。性能
using System.Collections.Generic; //泛型容器的命名空間code
相似C++的list<T>。對象
額外的,LinkedListNode<T> 是雙向鏈表的節點類型排序
using System.Collections.Generic; //泛型容器的命名空間隊列
相似C++的queue<T>。內存
Queue<T>的底層是動態數組實現的隊列hash
using System.Collections.Generic; //泛型容器的命名空間
相似C++的stack<T>。
Stack<T>的底層是動態數組實現的棧
using System.Collections.Generic; //泛型容器的命名空間
相似C++的map<K,V>。
有另外一個也很是類似功能的SortedList<K,V>,可是它的實現不是二叉樹,而是每次插入都要排序的數組(真如其名),
因此插入刪除速度都是O(n),並且其用處比較少(例如要求O(1)速度找出第幾大),就不放出來了。
using System.Collections.Generic; //泛型容器的命名空間
相似C++的unorderd_set<K>和unorderd_map<K,V>。
額外的,KeyValuePair<K,V> 是鍵/值對結構,用於輔助Dictionary<K,V>結構。
using System.Collections; //非泛型容器的命名空間
相似C++的bitset。
using Unity.Collections; //NativeArray<T>的命名空間
NativeArray<T>只能容納值對象。
在建立的時候除了指定length外,還須要指定allocator模式:Temp(臨時),TempJob(Job內臨時),Persistent(持久)
//示例,容量233,臨時內存 NativeArray<T> array = new NativeArray<T>(233,Allocator.Temp);
這是Unity官方提供的容器類,它所指定的allocator模式多是相似Temp對應棧內存分配,Persistent對應堆內存分配的方式。
它只是簡單的封裝一下數組,本質和普通的struct數組彷佛沒什麼區別,都能內存連續使cpu更容易命中緩存。
可是使用NativeArray能更增強調這是在使用值類型的數組,而非類對象數組。避免下面狀況出現:
//不能直接分辨ST是結構體仍是類 ST[] array = new ST[1024]; //錯把st看成類對象來修改,實際上這樣只是拷貝一份ST而後再對拷貝出來的進行修改 var st = array[0]; st.x = 0;