A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊双 中级黑马   /  2012-10-18 13:03  /  1697 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

他们都是存储什么数据的,泛型又是怎么回事?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
数组是无序元素序列,数组中的所有元素都是相同的类型(这一点和类和结构不一样),一个数组的元素都是存在堆中连续的内存块中,可以通过整数索引来访问数组中的元素(结构或类中的字段是通过名称来访问的)。
集合类中的元素都是object类型的,如果要使用集合需要引入命名空间system.collections,通常用的集合类有Arraylist,Stack,Queue,Hastable集合类,一般情况下用不到。
关于泛型的话,你有必要了解一下装箱和拆箱,装箱就是把值类型的数值直接赋给object类型,拆箱就是将object类型的值赋给值类型,object是引用类型。
因为装箱和拆箱会占用内存空间,造成运行不方便,引入泛型,增强类型的安全性,减少装箱量。
这是我的理解,你自己看着理解吧,不好理解的话,再看点高深的知识,希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
数组和集合类的主要差异:
1.数组需要声明它所容纳的元素的类型,而集合则不需要。原因:集合是以object的形式来存储它所容纳的元素的。
2.数组的实例具有固定的大小,不能随意增大或缩小。而集合可根据需要动态改变大小。
3.数组可以是多维的,但集合是线性的。(集合可以嵌套,其元素可以是其他集合,这样我们可以模拟一个多维数组,但是会影响程序的可读性)。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
数组是集合的一种。官方的说法是:
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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
关于数组和集合,他们都是存储什么数据的,泛型又是怎么回事?
我的理解,欢迎指正批评!
数组:数据结构中分为链式存储和顺序存储,数组可以用来声明一个连续的存储空间(物理上和逻辑上的连续),什么数据都可以存,泛型可以理解为广泛的类型,好处是可以在创建类实例的时候才确定具体的类型,可以有效的避免使用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; } }
    }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 ♂张耕明 于 2012-10-18 21:59 编辑

我用的电信3G,网速问题多发了一次,由于我不能删贴,所以编辑解释一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马