Array,ArrayList,List<T>,LinkedList<T>,Queue<T>,Stack<T>,Dictionary<K,T>
1、Array
初始化时确定空间占用,无法增加元素个数。
static void Main(string[] args)
{
int[] array = new int[5] { 3,2,1,5,4};//固定容量,创建后无法新增元素
array[0] = 0;//删除元素,直接赋值0
array[1] = 6;//改元素,直接赋值
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);//查元素
}
Console.ReadLine();
}
2、ArrayList
所有元素均为Object,所以存在很多装箱拆箱,大量数据时会很耗性能。
static void Main(string[] args)
{
ArrayList list = new ArrayList(new int[5] { 1,2,3,4,5});
list.Add(6);//增加元素
list.AddRange(new int[2]{ 7,8});//按范围增加多个元素
list.Remove(1);//删除元素
list.RemoveAt(2);//按下标删除元素
list[0] = 100;//改
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);//查
}
Console.ReadLine();
}
3、List<T>
泛型可以在创建是确定需要的类型,避免了ArrayList中装箱拆箱的操作。
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);//增加元素
list.AddRange(new int[2]{ 2,3});//按范围增加多个元素
list.Remove(1);//删除元素
list[0] = 100;//改
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);//查
}
Console.ReadLine();
}
4、LinkedList<T>
MSDN:点击打开链接
链表在内存中不是连续存储。
- 向链表中插入或删除节点无需调整结构的容量。添加和删除速度比数组快。
- 链表适合在需要有序的排序的情境下增加新的元素。例如要在数组中间某个位置增加新的元素,数组需要移动很多元素, 链表只需调整添加位置两边的元素指向即刻。
- 由于其在内存空间中不一定是连续排列,所以访问时候无法利用下标,而是必须从头结点开始,逐次遍历下一个节点直到寻找到目标。所以当需要快速访问对象时,数组无疑更有优势。
static void Main(string[] args)
{
LinkedList<int> list = new LinkedList<int>();
list.AddFirst(1);//增加开始位置元素
list.AddLast(2);//增加末尾位置元素
list.AddLast(3);
list.RemoveFirst();//删除开始位置元素
list.Remove(3);//删除指定元素
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
5、Queue<T>
队列:先进先出。MSDN:点击打开链接
static void Main(string[] args)
{
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);//增加元素到队尾
queue.Enqueue(2);
queue.Enqueue(3);
queue.Dequeue();//删除队首元素,最先加入到队列中的元素
//Console.WriteLine(queue.Peek()); 查询队列首位元素,但不移除该元素
foreach (var item in queue)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
6、Stack<T>
MSDN:点击打开链接
与Queue<T>类似,这里是先进后出。
static void Main(string[] args)
{
Stack<int> stack = new Stack<int>();
stack.Push(1);//增加元素
stack.Push(2);
stack.Push(3);
stack.Pop();//删除最后末尾元素
//int sum = stack.Sum();//求和
//int num = stack.Peek();//返回最顶部元素,不移除
foreach (var item in stack)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
7、Dictionary<K,T>
MSDN:点击打开链接
static void Main(string[] args)
{
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("A", 1);//增
dic.Add("B", 2);
dic.Add("C", 3);
// dic.Remove("A");//删
dic["B"] = 4;//改
foreach (var item in dic)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
8、总结