浅谈数据集合

程序=数据+算法
在日常程序开发过程中,数据是程序操作的主体。因此,如何对数据进行有效的组织,是程序设计的核心问题。我们一般采用“数据集合“与“结构体“对数据进行组织与存取,其中数据集合是我们在编程过程中应用最多的,也是最为有效的数据组织形式。因而,对它的学习和掌握,是开发人员应具有的基本技能。 

数据集合根据数据存储方式及应用范围可被划分为以下几种类型:堆栈、链表、字典。这几种数据集合在C++的STL(标准模板库)中得到充分的实现。现在,大多数主流开发语言,对上述集合的实现,都留有STL的痕迹。 

在STL中,数据集合、算法、函数被有效的结合,提供了丰富的集合操作方法,使程序员可以简捷、高效的进行程序设计。
在STL中,数据集合被划分为:序列、链表、映射。其中,序列包括:单向序列(vector向量),队列(先进先出),双向队列(可在队列两端高效的添加元素),栈(后进先出) 

链表包括:单向链表与双向链表。映射包括:MAP(键/值一对一),MultiMap(键/值一对多),Set(单值集合),MultiSet(多值集合)。由于在内存中的存储方式不同,因此它们在检索、增、删、改操作中,性能上存在差异。

序列在内存中是以连续的内存空间进行存放的,因此,它在进行顺序检索或进行索引检索(利用地址便宜)时,性能是最优的。但在追加或删除数据时,倘若修改点不是在序列的尾部,那么,执行效率会变得很差。 

链表在内存中是散列存放的,靠指针建立前后元素间的关联。因此,它在任意位置插入及删除元素,所用时间是相等的。但它的检索效率要低于序列。 

映射以存储桶的形式存储键/值对。存储桶之间靠对键进行哈希算法后得到的哈希代码,进行组织。一般按照哈希代码顺序排序,也可按指定规则排序。由于它是通过哈希代码进行数据的检索,因此,它适合于通过数值所对应的关键字对数据进行查询。 

在stl中,还通过算法、函数向用户提供了大量操作集合的方法。例如:倒置、排序、比较、截取,复制等。现在大多数编程语言已经把它们直接封装到数据集合中了。 

在数据检索操作中,stl主要通过迭代器对数据集合中得数据进行访问。 


下面对.Net中数据集合的概念及使用方法进行介绍:
.Net中的数据集合大都实现了ICollection接口,因此,它们普遍存在以下几项功能:
1、通过for each ... next 对集合中的数据进行枚举。
for each语句通过数据集合提供的getNumerate()方法,获取数据集合内部迭代器。之后,再通过该迭代器访问数据集合中的元素。
在for each操作过程中,它调用迭代器的MoveNext方法将指针移到下一条记录,之后再通过Current属性,获得迭代器当前指向的值。
如果Movenext返回为false,则Current报异常。当调用getNumerate()方法获得迭代器时,指针指向第一个元素之前的位置,这时需要调用MoveNext方法,否则访问current会引发异常。 

2、同步操作与线程安全。 

在对数据集合进行多线程操作时(增、删、改),应注意添加线程安全设计。一些集合中已存在线程安全函数,可直接进行调用。而对于那些不提供线程安全函数的数据集合,应在代码中添加同步操作。 

3、可通过CopyTo方法,将数据导入数组中。
4、提供增、删、改、查询操作。 

部分集合还提供:
容量与技术操作,内存自动管理(当集合过大时,可自动申请内存,复制数据),可更改下限的操作。 

下面介绍一下在用.Net开发时,数据集合的选择标准:
需要对集合数据进行顺序访问,并在访问后丢掉数据时,应考虑使用:
Queue堆,Stack栈 

需要对集合数据进行索引访问,且集合的上限为动态时,应考虑使用:
ArrayList(注意:ArrayList不提供多维数据存储) 

需要对集合数据进行索引访问,且集合的上限为静态时,应考虑使用:
Array(多维存储时为首选) 

需要进行位操作时,应考虑使用:
BitVector 

需要按关键字对集合数据进行检索时,应考虑使用:
Hashtable 

需要对映射集合提供索引检索功能时,应考虑使用:
SortList 

需要提供一对多映射集合功能时,应考虑使用:
NameValueCollection 

需要字符串集合操作时,应采用:
StringCollection 
StringDictionary

StringEnumerator 

我的百度的网址 http://hi.baidu.com/new/fancyforerver

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值