列举项目中常用的几个比较多的数据类型,记录一下方便下次查找,其他还有很多未列举
Array/ArrayList/List/LinkedList/Queue/Stack/HastSet/SortedSet/Hashtable/SortedList/Dictionary/SortedDictionary
IEnumerable、ICollection、IList、IQueryable
接口是标识功能的,不同的接口拆开,体现接口隔离原则
IEnumerable 任何数据集合,都实现了的,为不同的数据结构,提供了统一的数据访问方式,体现就是迭代器模式
-
数组
-
int[] intArray = new int[3]; ArrayList List<int> intList = new List<int>() { 1, 2, 3, 4 };
- 日常使用最多的,不用多说
-
链表
LinkedList
1.元素不连续分配,每个元素都有记录前后节点,节点值可以重复
2.不能下标访问,找元素就只能遍历 查找不方便
LinkedListNode<int> node123 = linkedList.Find(123);//元素123的位置 从头查找
Queue
1 先进先出 放任务延迟执行,A不断写入日志任务 B不断获取任务去执行
2. Queue<string> numbers = new Queue<string>();
Stack
1 先进后出 解析表达式目录树的时候,先产生的数据后使用
2 Stack<string> numbers = new Stack<string>();
-
Set
集合:hash分布,元素间没关系,动态增加容量 去重
例:统计用户IP;IP投票 交叉并补--二次好友/间接关注/粉丝合集
HashSet
- HashSet<string> hashSet = new HashSet<string>(); //排序的集合:去重 而且排序
- SortedSet<string> sortedSet = new SortedSet<string>();
-
key-value
- Hashtable 是基于数组实现的 key-value 体积可以动态增加 拿着key计算一个地址,然后放入key-value
- object-装箱拆箱 如果不同的key得到相同的地址,第二个在前面地址上 + 1
- 查找的时候,如果地址对应数据的key不对,那就 + 1查找。
- 查找个数据 一次定位; 增删 一次定位; 增删查改 都很快
- 浪费空间,数据太多,重复定位定位,效率就下去了
- 字典:泛型;key - value,增删查改 都很快;有序的
- 字典不是线程安全
- Hashtable table = new Hashtable();
- Dictionary<int, string> dic = new Dictionary<int, string>();
- SortedDictionary<int, string> dic = new SortedDictionary<int, string>(); //排序的key-value
- SortedList sortedList = new SortedList(); //IComparer
ConcurrentDictionary
- 线程安全的字典
其他线程安全的类型……