1、Queue宣告創建物件,(Queue為泛型物件,)
public class Queue<T> :IEnumerable<T>,System.Collections.ICollection,IReadOnlyCollection<T>
本質為Array物件存盤資料,
Queue<string> qy = new Queue<string>(); private T[] _array public Queue() { _array = Array.Empty<T>(); } Queue<int> qy1 = new Queue<int>(12); public Queue(int capacity) { if (capacity < 0) throw new ArgumentOutOfRangeException(nameof(capacity), capacity, SR.ArgumentOutOfRange_NeedNonNegNum); _array = new T[capacity]; }
Queue<int> qy2 = new Queue<int>(new List<int>()); public Queue(IEnumerable<T> collection) { if (collection == null) throw new ArgumentNullException(nameof(collection)); _array = EnumerableHelpers.ToArray(collection, out _size); if (_size != _array.Length) _tail = _size; }
2、佇列的空間是實際存盤值的兩倍,如果小于兩倍則每次增場4的長度,
1 if (_size == _array.Length) 2 { 3 int newcapacity = (int)((long)_array.Length * (long)GrowFactor / 100); 4 if (newcapacity < _array.Length + MinimumGrow) 5 { 6 newcapacity = _array.Length + MinimumGrow; 7 } 8 SetCapacity(newcapacity); 9 }
3、Queue為先進先出,
進佇列在陣列末尾賦值
public void Enqueue(T item) { if (_size == _array.Length) { int newcapacity = (int)((long)_array.Length * (long)GrowFactor / 100); if (newcapacity < _array.Length + MinimumGrow) { newcapacity = _array.Length + MinimumGrow; } SetCapacity(newcapacity); } _array[_tail] = item; MoveNext(ref _tail); _size++; _version++; }
出佇列則從頭部取值
public T Dequeue() { int head = _head; T[] array = _array; if (_size == 0) { ThrowForEmptyQueue(); } T removed = array[head]; if (RuntimeHelpers.IsReferenceOrContainsReferences<T>()) { array[head] = default!; } MoveNext(ref _head); _size--; _version++; return removed; }
4、TryDequeue 與 Dequeue()區別在于 TryDequeue 判斷size為0時,回傳false 并out 泛型的默認值
public bool TryDequeue([MaybeNullWhen(false)] out T result) { int head = _head; T[] array = _array; if (_size == 0) { result = default!; return false; } result = array[head]; if (RuntimeHelpers.IsReferenceOrContainsReferences<T>()) { array[head] = default!; } MoveNext(ref _head); _size--; _version++; return true; }
注:MaybeNullWhenAttribute(Boolean) 回傳值條件, 如果方法回傳此值,則關聯的引數可能為 null
5、Peek 僅僅時查看一下下一個要回傳的值,不從陣列移除
if (_size == 0) { result = default!; return false; } result = _array[_head]; return true;
隨是拙見,但為原創,轉載注明出處,敬謝
Queue 常用的方法大約就這些,先寫道這里,碎覺,
以下為公眾號,一起學起來~

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/64913.html
標籤:.NET Core
下一篇:【原創】在 ASP.NET Core 3.1 中使用 Senparc.Weixin.Work 企業微信 SDK —— 發送文本訊息
