建议21:选择正确的集合
来源:互联网 发布:哈利波特校服淘宝 编辑:程序博客网 时间:2024/06/05 05:59
建议21:选择正确的集合
要选择正确的集合,首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。
集合的分类参考下图:
由于非泛型集合存在效率低及非类型安全的缺点,所以这里只讨论泛型集合。
如果集合的数目固定并且不涉及转型,使用数组效率高,否则使用List<T>。
顺序存取结构,即线性表。线性表可动态地扩大和缩小,它在一片连续的区域中存储数据元素。线性表不能按照索引进行查找,它是通过对地址的引用来搜索元素的,为了找到某个元素,它必须遍历所有元素, 直到找到对应元素为止。所以,线性表的优点是插入和删除数据效率高,缺点是查找的效率相对低一些。
队列Queue<T>遵循的是先进先出模式,它在集合末尾添加元素,在集合的其实位置删除元素。
根据队列的特点,可以用它来处理并发命令等场景:先让所有客户端的命令入队,然后,由专门的工作线程来执行命令。在分布式中的消息队列就是一个典型的队列应用实例。
栈Stack<T>遵循的是后进先出模式,它在集合末尾添加元素,同时也在末尾删除元素。
字典Dictionary<TKey,TValue>存储的是键值对,值在基于键的散列码的基础上进行存储。字典类对象由包含集合元素的存储桶组成,每一个存储桶与基于该元素的键的哈希值关联。如果需要根据键进行值的查找,使用Dictionary<TKey,TValue>将会是搜索和检索更快捷。
双向链表LinkedList<T>是一个类型为LinkedListNode的元素对象的集合。当我们觉得在集合中插入和删除数据很慢时,可以考虑使用链表。如果使用LinkedList<T>,我们会发现此类型并没有其他集合普遍具有的Add方法,取而代之的是AddAfter、AddBefore、AddFirst、AddLast等方法。双向链表的每个节点都向前指向Previous节点,向后指向Next节点。
还有几个类型:SortedList<T>、SortedDictionary<TKye,TValue>、SortedSet<T>,它们所对应的类分别是:List<T>、Dictionary<TKye,TValue>、HashSet<T>, 作用是将原来无序排列变为有序排列。
在命名空间System.Collections.Concurrent下,还涉及几个多线程集合类:ConcurrentBag<T>、ConcurrentDictionary<T>、ConcurrentQueue<T>、ConcurrentStack<T>,分别对应List<T>、Dictionary<TKye,TValue>、Queue<T>、Stack<T>。
在实际工作中,应该根据需要选择合适的集合类。
转自:《编写高质量代码改善C#程序的157个建议》陆敏技
- 建议21:选择正确的集合
- 改善C#程序的建议3:在C#中选择正确的集合进行编码
- 改善C#程序的建议3:在C#中选择正确的集合进行编码
- 正确选择服务器的方法和建议
- 鲤鱼鱼竿豆荚 - 建议做出正确的选择
- 选择正确的工具
- 选择正确的Device
- 选择正确的方案
- 选择正确的数据类型
- 改善C#:在C#中选择正确的集合进行编码
- 选择正确的启用期间
- 如何正确的选择运算放大器
- sklearn:选择正确的模型
- ocliint-选择正确的报告
- 选择正确的初始化方式
- 正确的选择log级别
- 我的选择正确吗?
- 如何做出正确的选择
- Android6.0 Launcher3 拖拽分析
- 关于js对当前时间的处理
- jquery改变控件值
- Tomcat相关内容-总结
- ActiveMQ的Topic持久化
- 建议21:选择正确的集合
- GreenDao3的集成
- mybatis关联字表分页查询实现(物理分页)
- 粒子编辑器Particle designer属性的介绍
- 结账时提示:不能在对象 't_Balance' 中插入重复键
- NOI题解(1.12编程基础之函数与过程抽象)(待补全)
- Android5.1修改以太网MAC地址(SElinux)
- 链表操作 对链表进行输入,插入,删除结点,按关键字进行查找操作 C语言
- Linux磁盘管理