LinkedList是很好用的一个工具,可以方便做出前后关系- using System;
- using System.Collections.Generic;
- namespace ConsoleApplication
- {
- class Program
- {
- static void Main(string[] args)
- {
- LinkedList<int> a = new LinkedList<int>();
- a.AddFirst(3);
- a.AddLast(1);
- a.AddLast(4);
- foreach (int i in a)
- Console.Write(i + " ");
- Console.WriteLine();
- LinkedListNode<int> cur = a.Find(3); //cur对应3所在的位置
- a.AddBefore(cur, 2); //在3前面添加2
- foreach (int i in a)
- Console.Write(i + " ");
- a.Remove(3);
- a.Clear();
- Console.Read();
- }
- }
- }
复制代码插入:O(1) (在头尾部),O(N) (在其他位置) 删除:O(1) (在头尾部),O(N) (在其他位置) 按照索引器访问:没有索引器(因为没有实现IList<T>) 查找:O(N)
除此之外,还有SortedList<K,T>和SortedDictionary<K,T>这两个,是用于排序频繁发生的时候,排序成本O(ln(N)) 一些可能会用到的容器类: 线性表和链表(使用最多的对象):
- Array (T[]):当元素的数量是固定的,并且需要使用索引器时。
- Linked list (LinkedList<T>):当元素的数量不是固定的,且存在大量列表的头尾添加的动作时。否则使用 List<T>。
- Resizable array list (List<T>):当元素的数量不是固定的,并且需要使用索引器时。
栈和队列(只有在模拟栈和队列时才考虑): - Stack (Stack<T>):当需要实现 LIFO(Last In First Out)时。
- Queue (Queue<T>):当需要实现 FIFO(First In First Out)时。
哈希(需要大规模查找): - Hash table (Dictionary<K,T>):当需要使用键值对(Key-Value)来快速添加和查找,并且元素没有特定的顺序时。有了泛型版本的字典,我们几乎永远不需要使用非泛型的HashTable。
- Tree-based dictionary (SortedDictionary<K,T>):当需要使用键值对(Key-Value)来快速添加和查找,并且元素总是需要根据 Key 来排序时。
集合(保存一组唯一的值/模拟集合运算): - Hash table based set (HashSet<T>):当需要保存一组唯一的值,并且元素没有特定顺序时。
- Tree based set (SortedSet<T>):当需要保存一组唯一的值,并且元素总是需要排序时。
來自:cony138
|