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

© 伍仪华 黑马帝   /  2011-7-29 17:58  /  2186 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近看到高薪视频里面介绍了,但是概念还是比叫模糊

评分

参与人数 1技术分 +1 收起 理由
admin + 1 确实有点模糊!以后得注意

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-7-29 18:18:25
沙发
:L 说实话,你的问题更模糊
回复 使用道具 举报
黑马网友  发表于 2011-7-30 12:28:30
藤椅
要成为一名优秀的程序员,就要用各种高端的技术武装自己,让自己变得更NB,以下是我以前网上找的内容,现作为笔记,关于为什么用泛型的,也就是它的作用。至于怎么使用,这个不好回答,你还是看张老师的视频吧,感觉老是讲得很好。

我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。

为什么要使用泛型
为了了解这个问题,我们先看下面的代码,代码省略了一些内容,但功能是实现一个栈,这个栈只能处理int数据类型:[code]public class Stack
    {
        private int[] m_item;
        public int Pop(){...}
        public void Push(int item){...}
        public Stack(int i)
        {
            this.m_item = new int[i];
        }
}[/code]上面代码运行的很好,但是,当我们需要一个栈来保存string类型时,该怎么办呢?很多人都会想到把上面的代码复制一份,把int改成string不就行了。当然,这样做本身是没有任何问题的,但一个优秀的程序是不会这样做的,因为他想到若以后再需要long、Node类型的栈该怎样做呢?还要再复制吗?优秀的程序员会想到用一个通用的数据类型object来实现这个栈:[code]public class Stack
    {
        private object[] m_item;
        public object Pop(){...}
        public void Push(object item){...}
        public Stack(int i)
        {
            this.m_item = new[i];
        }
    }[/code]这个栈写的不错,他非常灵活,可以接收任何数据类型,可以说是一劳永逸。但全面地讲,也不是没有缺陷的,主要表现在:

当Stack处理值类型时,会出现装箱、折箱操作,这将在托管堆上分配和回收大量的变量,若数据量大,则性能损失非常严重。
在处理引用类型时,虽然没有装箱和折箱操作,但将用到数据类型的强制转换操作,增加处理器的负担。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马