变量、数组、泛型、集合
来源:互联网 发布:湖泊数据下载 编辑:程序博客网 时间:2024/05/19 09:50
发展
最开始用内存中一个位置映射一个值,用变量来“使用”这个值。
进一步发展,用变量来引用一组值,这就是数组。由数组概念,发展出链表、堆、栈,进行排序、检索等。但这并不能完全表达,由此发展出集合概念,它是更强大的数组,都依赖于Object基类。
随之而来的是集合中元素并不一定是一样的,于是都得转为Object,涉及到装箱,使性能下降,特别是元素量巨大时。由于我们一般使用同一类型(强类型)更方便操作。由此产生了泛型
泛型,就是把里面的元素强制指定为特定的类型,属于集合的进化版。
数组
在分配空间上,数组分配在一块连续的数据空间上,因此在分配空间时必须确定大小。
数组优点:
1)可以利用偏移地址来访问元素,效率高
2)可以使用折半方法查找元素,效率较高
数组缺点:
1)空间连续,存储效率低;
2)插入和删除元素效率比较低,且比较麻烦
集合
数组功能很强大,但Array基类并没为数组提供更多的功能,比如排序、动态分配内存。为了更强大的功能产生了集合。
集合(Collections)名称空间是System名称空间的一部分,它提供系列高级功能。
对不同的用处,System.Collections名称空间提供了几个强大的类:
ArrayList 实现一个数组,其大小在添加元素时自动增加大小(不必烦恼数组的上限或用ReDim、 Preserve)
BitArray 管理以位值存储的布尔数组
Hashtable 实现由键组织的值的集合(Key,Value),排序是基于键的散列完成的(哈希函数)
Queue 实现先进先出集合(排序方式)
Stack 实现后进先出集合
SortedList 实现带有相关的键的值的集合,该值按键来排序,可以通过键或索引来访问
和数组相比,使用大小根据保存的元素数确定,定义时不用确定大小。增加、删除、访问数组中的数据时也比较方便。但集合不是类型安全的。使用集合元素时,需要拆装箱,相对于简单的赋值而言,拆装箱需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。其次,拆箱所需的强制转换也需要进行大量的计算。总之,带来了很大的性能消耗。
泛型
集合中,任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,添加到列表中时,进行装箱操作,在检索时进行取消装箱操作。这样,强制转换以及装箱和拆箱操作都会降低性能。
另一个限制是缺少编译时类型检查。同一个集合可接收不同类型,所有项都强制转换为 Object,在编译时无法检查是否可以收这种类型,还是人为错误输入了另一个类型,同时智能感应只会提示Object的方式,使得检查错误变得艰难。
如果我们对其中的类型进行一些限制,使之成为统一的类型,虽然稍微增加了编码的复杂性,但好处是可以创建一个 更安全并且速度更快的列表, 校验错误也变得容易。
鉴于这种情况,催生了泛型的产生。
泛型通常使用List(of T)形式,List是类型(或者类)的名称 ,字母T是点位符类似于参数。它表示 必须提供一个用来定制泛型的特定类型值,同时也限定的它只能是这个类型。
泛型有两种形式:泛型类型和泛型方法
List(of T)是泛型类型,定义了完整的类型或类的模板。
泛型 方法是一种方法模板,使用时必须指明方法使用的“具体类型”。
格式:方法名(of T)(参数)
- 变量、数组、泛型、集合
- 变量、数组、集合、泛型的发展
- 数组/集合(ArrayList)/泛型
- c# 集合 数组 泛型
- 【C#】数组,集合,泛型
- 数组、集合、泛型
- 数组变量存储值,报引用未初始化的集合
- 数组集合
- 数组集合
- 集合(集合转成数组)
- 数组变量
- 数组与集合 -- 数组
- 服务器变量集合
- web服务器变量集合
- servervariables变量集合
- Drupal 变量集合
- android 变量Map集合
- 集合(Arrays)-数组变集合
- 网络编程的实例
- linux学习笔记—关机与重启命令
- A == B ?
- 关于矩阵的一些基本运算
- STM32高分辨率定时器(HRTIM)使用实例之PWM
- 变量、数组、泛型、集合
- linux 临时增加swap空间
- ISO C89 forbids mixed declarations and code
- ANDROID开发环境搭建
- 从线上走向线下的用户体验
- 黑马程序员_java基础_集合(Collection和List、Set)
- MFC 学习之 下拉列表框
- svd 推荐算法
- Dalvik opcodes