C# 數組結構

數組結構:node

Array :在內存上是連續分配的,並且元素類型是一致的;數組

特色:是讀取快 能夠座標訪問 可是增刪慢,長度不能變安全

好比 int[] intArray=new int[20]; intArray[3]=10;數據結構

 

ArrayList:在內存上是連續分配的,元素沒有類型限制,任何元素都是當成object處理的,若是是值類型,會有裝箱操做spa

  不定長度的  Add增長長度 索引賦值不會增長長度;讀取快  增刪慢;線程

ArrayList arrayList=new ArrayList();排序

arrayList.Add("001");索引

arrayList.Add("002");接口

arrayList.Remove("Eleven");隊列

array[2]=32;

//刪除數據

 

List:核心也是Array 內存上是連續分配的 能夠用索引訪問 不定長度 ;泛型,保證類型安全,避免裝箱拆箱;讀取快,增刪慢;

List<string> stringList=new List<string>();

stringList.Add("001");

 

鏈表類型

LinkedList:泛型的,鏈表 元素不連續分配,每一個元素都有記錄先後節點;

不能經過座標訪問, 找元素,只能遍歷,查找不方便;增刪比較方便;

LinkedList<int> linkedList=new LinkedList<int>();

linkedList.AddFirst(1);

linkedList.AddLast(10);

bool isContain=linkedList.Contains(123);

LinkedListNode<int> node123=linkedList.Find(123);

linkedList.AddBefore(node123,10);

linkedList.AddAfter(node123,11);

linkedList.Remove(123);

linkedList.RemoveFirst();

linkedList.RemoveLast();

 

Queue: 隊列,就是鏈表, 先進先出, 如任務延遲執行,A不斷地寫入任務 B不斷獲取任務去執行;

Queue<int> numbers=new Queue<int>();

numbers.Enqueue(1);

numbers.Enqueue(2);

numbers.Enqueue(3);

numbers.Dequeue();//移除

numbers.Peek();//不移除

 

Stack: 棧,是鏈表, 先進後出

Stack<int> numbers=new Stack<int>();

numbers.Push(1);

numbers.Push(2);

numbers.Push(3);

numbers.Push(4);

numbers.Pop();//讀取並移除

numbers.Peek();//讀取不移除

 

集合Set

HashSet:hash分佈 元素間沒有關係 動態增長的 會自動去重 不是連續分佈 不能用索引座標訪問 

統計用戶IP,IP投票;還能夠作交叉並補的集合 

HashSet<int> hashSet=new HashSet<int>();

hashSet.AddFirst(1);

hashSet.AddFirst(1);

hashSet.AddFirst(2);

hashSet.AddFirst(3);

hashSet.AddLast(10);

 

HashSet<int> hashSet1=new HashSet<int>();

hashSet1.AddFirst(1);

hashSet1.AddFirst(2);

hashSet1.AddLast(3);

hashSet1.AddLast(7);

 

hashSet1.IntersectWith(hashSet);//交集 一、二、3

hashSet1.UnionWith(hashSet);//並集一、二、三、七、10

hashSet1.ExceptWith(hashSet);//差集 10

hashSet1.SymmetricExceptWith(hashSet);//補集 7

*交叉並補只能執行一次*

 

SortedSet:排序的集合,能夠去重加排序;也能夠作交叉並補

SortSet<int> sortSet=new SortSet<int>();

sortSet.AddFirst(1);

sortSet.AddFirst(1);

sortSet.AddFirst(2);

sortSet.AddFirst(3);

sortSet.AddLast(10);

 

Key-Value

HashTable:key—value 體積能夠動態增長 拿着key計算一個地址,而後放入key-value

object-裝箱拆箱 若是是不一樣的key獲得相同的地址,第二個在前面地址上+1

查找的時候,若是地址對應的數據key不對,那就+1查找。。

浪費了空間 基於數組實現

查找數據 一次定位 增刪 一次定位;增刪改查 都很快

浪費空間,數據太多 重複定位 效率就下去了

HashTable table=new HashTable();

table.Add("1","0001");

table.Add("2","0004");

table["3"]="0003";

線程安全

Hashtable.Synchronized(table);//只有一個線程寫 多個線程讀

 

Dictionary:泛型 key-value 讀寫增刪改查都很快 有序的

Dictionary<int,string> dic=new Dictionary<int,string> ();

dic[1]="1";

SortedDictionary:泛型 key-value 讀寫增刪改查都很快 有序的

SortedDictionary<int,string> dic=new SortedDictionary<int,string> ();

dic[1]="1";

SortedList:泛型 key-value 讀寫增刪改查都很快 有序的 按照key排序

SortDictionary<int,string> dic=new SortDictionary<int,string> ();

dic[1]="1";

 

ILIst、IQueryable、IEnumerable、ICollection

接口是標識功能的,不一樣的接口拆開,爲了接口隔離,儘管有重複

IList 能夠下標訪問

IEnumerable 遍歷纔會查詢比較 迭代器yield  任何數據集合 都實現了不一樣的數據結構,提供了統一的訪問接口 yield訪問模式

IQueryable 表達式目錄樹解析 延遲到遍歷的時候纔會去執行

相關文章
相關標籤/搜索