浅谈数据集合

来源:互联网 发布:暴风tv安装软件 编辑:程序博客网 时间:2024/06/06 20:18
程序=数据+算法
在日常程序开发过程中,数据是程序操作的主体。因此,如何对数据进行有效的组织,是程序设计的核心问题。我们一般采用“数据集合“与“结构体“对数据进行组织与存取,其中数据集合是我们在编程过程中应用最多的,也是最为有效的数据组织形式。因而,对它的学习和掌握,是开发人员应具有的基本技能。 

数据集合根据数据存储方式及应用范围可被划分为以下几种类型:堆栈、链表、字典。这几种数据集合在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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝呕吐发烧怎么办 2岁宝宝呕吐厉害怎么办 1岁宝宝半夜呕吐怎么办 2岁半宝宝呕吐怎么办 2岁宝宝半夜呕吐怎么办 两岁宝宝一直吐怎么办 原画师老了以后怎么办 孩子不想上学怎么办怎么去说服 嫉妒别人比我好怎么办 三岁宝宝爱打人怎么办 1岁宝宝喜欢打人怎么办 ps图层解锁不了怎么办 沈腾结婚马丽怎么办 延长甲没有纸托怎么办 高考第一志愿没录取怎么办 电子画颜料干了怎么办 数字画颜料干了怎么办 彩砂纸画不好了怎么办 宝宝吃了油画棒怎么办 2岁宝宝不爱刷牙怎么办 两岁宝宝不刷牙怎么办 1岁宝宝不爱刷牙怎么办 3岁宝宝不肯刷牙怎么办 20岁没学历迷茫怎么办 四岁了不长头发怎么办 17岁掉头发严重怎么办 头发很油,又少怎么办 25岁头发变稀怎么办 宝宝头发少又黄怎么办 头旋附近头发少怎么办 25岁掉头发严重怎么办 2岁宝宝头发稀少怎么办 掉头发很厉害怎么办吧 头发点的很厉害怎么办 为什么掉头发很厉害怎么办 产后2年脱发严重怎么办 产妇掉头发很厉害怎么办 头发掉了怎么办小妙招 头顶头发掉的厉害怎么办 20岁头发有些少怎么办 头痒头发掉厉害怎么办