1、LinkedList(链表)
链表中元素存储内存中是不连续分配,每个元素都有记录前后节点,节点值可以重复,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
Console.WriteLine("***************LinkedList<T>******************"); LinkedList<string> linkedList = new LinkedList<string>(); linkedList.AddFirst("C/C++"); linkedList.AddLast("Java"); bool isContain = linkedList.Contains("Java"); LinkedListNode<string> 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<T>(队列)
Queue<T>
是链表,先进先出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
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<T>(堆栈)
Stack<T>
是链表,先进后出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。
例如,
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。