黑马程序员技术交流社区
标题:
关于数组和集合
[打印本页]
作者:
张俊双
时间:
2012-10-18 13:03
标题:
关于数组和集合
他们都是存储什么数据的,泛型又是怎么回事?
作者:
中山郎
时间:
2012-10-18 17:30
数组是无序元素序列,数组中的所有元素都是相同的类型(这一点和类和结构不一样),一个数组的元素都是存在堆中连续的内存块中,可以通过整数索引来访问数组中的元素(结构或类中的字段是通过名称来访问的)。
集合类中的元素都是object类型的,如果要使用集合需要引入命名空间system.collections,通常用的集合类有Arraylist,Stack,Queue,Hastable集合类,一般情况下用不到。
关于泛型的话,你有必要了解一下装箱和拆箱,装箱就是把值类型的数值直接赋给object类型,拆箱就是将object类型的值赋给值类型,object是引用类型。
因为装箱和拆箱会占用内存空间,造成运行不方便,引入泛型,增强类型的安全性,减少装箱量。
这是我的理解,你自己看着理解吧,不好理解的话,再看点高深的知识,希望对你有帮助。
作者:
汪书凯
时间:
2012-10-18 19:56
数组和集合类的主要差异:
1.数组需要声明它所容纳的元素的类型,而集合则不需要。原因:集合是以object的形式来存储它所容纳的元素的。
2.数组的实例具有固定的大小,不能随意增大或缩小。而集合可根据需要动态改变大小。
3.数组可以是多维的,但集合是线性的。(集合可以嵌套,其元素可以是其他集合,这样我们可以模拟一个多维数组,但是会影响程序的可读性)。
作者:
霍春雨
时间:
2012-10-18 21:26
数组是集合的一种。官方的说法是:
1.集合类定义为 System.Collections 或 System.Collections.Generic 命名空间的一部分。
2.大多数集合类都派生自 ICollection、IComparer、IEnumerable、IList、IDictionary 和 IDictionaryEnumerator 接口以及它们的等效泛型接口。
更一般的说法是:
“在 C# 中,集合类并非必须严格从 IEnumerable 和 IEnumerator 继承才能与 foreach 兼容;只要类有所需的 GetEnumerator、MoveNext、Reset 和 Current 成员,便可以与 foreach 一起使用。省略接口的好处为,使您可以将 Current 的返回类型定义得比 object 更明确,从而提供了类型安全。”
泛型就是类型很泛,其实是定义了不同类型公有的一些操作,使用时实例化特定的类型都可以。
兄弟没事可以看看msdn
作者:
♂张耕明
时间:
2012-10-18 21:54
关于数组和集合,他们都是存储什么数据的,泛型又是怎么回事?
我的理解,欢迎指正批评!
数组:数据结构中分为链式存储和顺序存储,数组可以用来声明一个连续的存储空间(物理上和逻辑上的连续),什么数据都可以存,泛型可以理解为广泛的类型,好处是可以在创建类实例的时候才确定具体的类型,可以有效的避免使用object发生装箱和拆箱的机率,从而提升性能。
集合:集合的内部可能使用到了链式存储或者顺序存储的一组序列,通过对该序列长度的判断自动增加容量,一段小代码:
public class DataStore<Ttype>
{
private Ttype[] _intArr;
/// <summary>
/// 默认初始容量的数组
/// </summary>
public DataStore()
{
_intArr = new Ttype[1000];
}
/// <summary>
/// 手动分配容量的数组
/// </summary>
/// <param name="capacity"></param>
public DataStore(int capacity)
{
_intArr = new Ttype[capacity];
}
public int Length { get { return _intArr.Length; } }
}
作者:
♂张耕明
时间:
2012-10-18 21:54
本帖最后由 ♂张耕明 于 2012-10-18 21:59 编辑
我用的电信3G,网速问题多发了一次,由于我不能删贴,所以编辑解释一下!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2