一、数组
分配在连续的内存,不能随意扩展,插入数据比较慢
性能高,索引查找快,数据再多性能也没有影响
int[] array = new int[4];
string[] array = new string[]{"123","456"};
二、 ArrayList
可变长度的,不限制类型,可以放置不同类型,所以不安全,可能会用错。
会有装箱操作,将一切元素都当作object,值类型会装箱
ArrayList arrayList = new ArrayList();
arrayList.Add("123");
arrayList.Add(123);
三、 List< T >
可变长度的泛型数组,没有装箱拆箱,类型安全
四、 LinkedList< T >
链表,在内存中不连续存储。添加删除元素效率比较高,只能遍历查找,不能索引访问,所以查询速度慢
LinkedList<string> list = new LinkList<string>();
list.AddFirst("123");
list.AddFirst("456");
五、Queue< T>
队列,先进先出,非线程安全,应用:多线程写日志
ConcurrentQueue 线程安全的
Queue<string> numbers = new Queue<string>();
numbers.Enqueue("张三"); //入队列
numbers.Enqueue("李四");
numbers.Dequeue(); //出队列
numbers.Peek(); //获取对象但不移除
六、 Stack< T>
栈,先进后出
Stack<string> numbers = new Stack<string>();
numbers.Push("张三");//入栈
numbers.Push("李四");
numbers.Pop(); //出栈
七、HashTable
哈希表,散列存储,将key做一个散列计算得到一个地址
不同的key,可能得到同一个结果,存储的时候把位置挪一下,也就是说原始保存数据的地方,需要预留空间
可以快速的增删改查(空间换时间)
线程安全的
HashTable table = new HashTable();
table.Add("123","456");
foreach(DictionaryEntry obj in table)
{
Console.WriteLine(obj.Key.ToString());
Console.WriteLine(obj.Value.ToString());
}
八、 Dictionary< TKey,TValue>
泛型的HashTable
ConcurrentDictionary 线程安全的
Dictionary<int,string> dic = new Dictionary<int,string>();
dic.Add(1,"123");
dic.Add(2,"456");
foreach(var item in dic){
Console.WriteLine($"{item.Key} : {item.Value}");
}
|