1、LinkedList(链表)
链表中元素存储内存中是不连续分配,每个元素都有记录前后节点,节点值可以重复,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
Console.WriteLine("***************LinkedList******************");LinkedList linkedList = new LinkedList ();linkedList.AddFirst("C/C++");linkedList.AddLast("Java");bool isContain = linkedList.Contains("Java");LinkedListNode nodeC = linkedList.Find("C/C++"); // 从头查找linkedList.AddBefore(nodeC, "C#");linkedList.AddAfter(nodeC, "Python");foreach(var item in linkedList){ Console.WriteLine("item = "+item);}linkedList.Remove("Java");linkedList.Remove(nodeC);linkedList.RemoveFirst();linkedList.RemoveLast();linkedList.Clear();
2、Queue(队列)
Queue
是链表,先进先出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
Console.WriteLine("***************Queue******************");Queue queue = new Queue();queue.Enqueue("C/C++");queue.Enqueue("C#");queue.Enqueue("Java");queue.Enqueue("Python");queue.Enqueue("CJavaPy");queue.Enqueue("JS");foreach (string item in queue){ Console.WriteLine(item);}Console.WriteLine($"Dequeuing '{queue.Dequeue()}'");Console.WriteLine($"Peek at next item to dequeue: { queue.Peek()}");Console.WriteLine($"Dequeuing '{queue.Dequeue()}'");Queue queueCopy = new Queue(queue.ToArray());foreach (string item in queueCopy){ Console.WriteLine(item);}Console.WriteLine($"queueCopy.Contains(\"c#\") = {queueCopy.Contains("c#")}");queueCopy.Clear();Console.WriteLine($"queueCopy.Count = {queueCopy.Count}");
注意:ConcurrentQueue
线程安全版本的Queue。
3、Stack(堆栈)
Stack
是链表,先进后出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
Console.WriteLine("***************Stack******************");Stack stack = new Stack();stack.Push("C/C++");stack.Push("C#");stack.Push("Java");stack.Push("Python");stack.Push("CJavaPy");stack.Push("JS");foreach (string item in stack){ Console.WriteLine(item);}Console.WriteLine($"Pop '{stack.Pop()}'");//获取并移除Console.WriteLine($"Peek at next item to dequeue: { stack.Peek()}");//获取不移除Console.WriteLine($"Pop '{stack.Pop()}'");Stack stackCopy = new Stack(stack.ToArray());foreach (string item in stackCopy){ Console.WriteLine(item);}Console.WriteLine($"stackCopy.Contains(\"C#\") = {stackCopy.Contains("C#")}");stackCopy.Clear();Console.WriteLine($"stackCopy.Count = {stackCopy.Count}");
注意:ConcurrentStack
线程安全版本的Stack。