List<泛型集合>
線性數據結構
概念
C#集合是來維護一組對象的數據結構,與數組不同,集合包含更多的功能。如:自動添加元素到指定位置,排序等。
C#中集合是指在system.Collection下的類型,他們大多數是通過實現此命名空間下的接口來實現的。泛型集合是指在system.Collection.Generic下的類型,他們在具體的集合類型的特性上增加了泛型的特性。泛型集合相對集合更安全,性能更好。
聲明(定義)
當我們創建了一個泛型列表的時候在其內部會創建一個大小為4的數組
每次當添加的元素超過了這個大小,其內部數組的長度將會擴大一倍
使用泛型集合類型之前必須先using System.Collections.Generic;
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1208 { class Program { static void Main(string[] args) { List<int> list = new List<int>(10); //實例化 如果不給長度的話 默認長度為4 Console.WriteLine(list.Capacity); //獲取最大長度 for (int i = list.Capacity; i > 0; i--) { list.Add(i); //遍歷添加數據 Add() } foreach (int item in list) { Console.Write(item + " "); //打印數據 } Console.WriteLine(); list.RemoveAt(5); //移除指定索引位置的數據 RemoveAt(index) foreach (int item in list) { Console.Write(item + " "); } Console.WriteLine(); list[7] = 15; //指定索引位置賦值 list.Remove(15); //按元素刪除 Remove(要刪的數據內容) list.Insert(2, 100); //指定索引插入數據 Console.WriteLine(list.IndexOf(100)); //通過值找索引 從前往后 Console.WriteLine("從后往前 " +list.LastIndexOf(100)); //通過值找索引 從后往前找 bool isHave = list.Contains(100); //查找是否含有某個數據 Console.WriteLine(isHave); Console.WriteLine(list.Count); //實際長度 Console.WriteLine(list.Capacity); //總長度
注意
賦值:通過索引器賦值時,傳入的索引要小於count的值
刪除:需要刪除的索引值必須小於count
插入:必須要在有值的范圍內插入
查找:通過值查找索引,如果該集合中沒有這個值,則返回-1
List排序
可以使用Sort方法直接對基本數據類型進行排序List可以對繼承了IComparable<T>接口的類或結構體進行排序
返回值<0:此實例在排序順序中位於other之前
返回值>0:此實例在排序順序中位於other之后
返回值==0:此實例與other實例位置不變
排序練習
public int CompareTo(Drug other) { //判斷類型是否相同,如果不同,兩者類型互減,如果相同則判斷品質誰前誰后 return !(this.type == other.type) ? (int)this.type - (int)other.type : (int)this.quality - (int)other.quality; }
ArrayList
直接通過實例化創建
不是泛型的
ArrayList創建的集合可以存儲任何類型
拆箱和裝箱--慎用(消耗性能較大)
拆箱:Object轉換成子類
裝箱:將子類轉換成Object類型
拆箱裝箱都非常消耗性能
ArrayList和List的區別
Dictionary字典
散列排列
字典的結構
字典在內存中為散列結構,用Key來索引對應Value,方便修改和查找(高於列表)
每對數據分為“鍵”和“值”
申請字典對象時需要指定鍵和值的類型
使用鍵值對的方式存取數據
字典也是泛型的
字典的特性
無序的
字典的元素是成對出現的
字典中的“鍵”不能重復
通過“鍵”去索引該鍵值對