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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姜姗姗 中级黑马   /  2014-4-28 18:41  /  1884 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 姜姗姗 于 2014-4-30 22:51 编辑

集合的出现可以放置任何的数据类型在集合里面,就是为了提高多应用的,什么数据类型都可以用,那么怎么又要引出泛型了呢?岂不是又相当于给限制了数据类型的放置。?集合是对数组的优化,为什么又要限制了数据类型了呢?如果说是因为安全为题,避免安全隐患,出现了泛型,那出现容器的原因又是什么呢?怎么才能说得通

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

11 个回复

倒序浏览
看具体的需求而定的吧,感觉需要限定类型的情况比较多见
回复 使用道具 举报
其实泛型的出现能更好的管理所接受的数据,泛型不是有<T>这样的表现形式吗?他也为数据存储开了道门。集合存储数据,如果实现限定数据的类型,这样能系统的管理数据和操作,举个不知道是否恰当的例子:一个集合中全部是String类型数据,那我对这个集合的所有数据操作都可以用String类中的方法,反正操作字符串的方法都可以使用。但是,如果集合中有String类型数据,Integer类型数据,还夹带其他自定义类型的数据,这样操作管理是不是很麻烦呢?所有说,泛型的出现方便我们管理,操作集合的数据,想要存储多类数据,就使用<T>这样的泛型定义吧,或者反射也行= -

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
doyxy 发表于 2014-4-28 18:52
看具体的需求而定的吧,感觉需要限定类型的情况比较多见

我是在问为什么java中会引入这个泛型这个概念,不是说什么时候用。。。懂?
回复 使用道具 举报
本帖最后由 随风而去 于 2014-4-28 19:53 编辑

哎...我给你举个例子
比如我们一个班集体 这个是属于一个集合吧
按我们人类的观点  班集体都是由人类构成  
但这时候突然这班集体突然多了几支小猫 小狗的也需要教育  你觉得教课还方便么??
翻译成JAVA ---当班集体是由人类构成的时候  List<Person>
但是突然加入了 动物 也来听课  那泛型就没必要了  就是 List<Object>
但是这时候 你取数据的时候 你无法知道你要取的是人类 还是动物 ,
好比 我是班主任,我想随便叫个学生帮我做事情,但是我无法确定的是人还是动物 ,因为动物无法听懂你的指示,这时候就的一个一个的去判断叫过来的是人 还是动物,效率大大降低
但如果泛型了 就好办了 我事先知道 都是人类 ,结果简而易见..
其实这个 翻译成OO思想 就是人类的归纳 分类 ..易于管理 易于判断.现在 加入泛型的好处显而易见  泛型的最大的好处就是便于管理,便于运用,而且符合OO思想

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
本帖最后由 zfan 于 2014-4-28 20:32 编辑

这个怎么说呢...实际上对于在java中添加泛型究竟合不合适是有争议的,Thinking in Java的作者就公开质疑过Java5中对于泛型的添加;我觉得连人家大师都争论不清楚的问题咱们也没必要太过于纠结了....这个问题还是交给时间处理比较合适,等到咱们在java这个领域里摸爬滚打上几年也许这个问题就不再是问题了.....
回复 使用道具 举报
我的理解:
泛型和集合两个概念!但是泛型大部分都是应用在集合中,集合就是数据结构,是底层存放数据的不同形式。
为什么要有容器,容器就是集合,学过数据结构就知道,容器有顺序表、链表、十字链表、(栈和队列,以及双端队列或者双向共享栈底的栈等等都是List的不同表现形式) ;树有二叉树,B+树B-树 、平衡二叉树,等等!映射Map、Set和JAVA一样,除了这些常见的容器还有很多容器不过都是基于最简单的容器来实现的。
泛型<>就是C++里面的STL模板,泛型有以下几点好处
1、解决集合的类型安全问题
2、当用到迭代器的时候 不需要对取出的元素强转
3、泛型定义在类上,实现了操作类元素类型的控制
    泛型定义在方法上,解决了不同类型参数和返回类型的重载问题
    泛型定义在接口上,如Map<K,T>好处大大滴。
泛型的特殊应用 在于泛型上限和下限,对于自定义类型和继承类型的类很有用!
但是泛型可以加上也可以不加上,集合好比是一和盆,什么样的集合好比是不同的盆,泛型就是规定盆里面究竟装什么,当然不规定也是可以的!但是用泛型写程序很爽的!加入A写了个类,类里面的方法只能处理String其他的我不管,B再来接着他写,当他写的时候万一传入Integer就是报错!定义了泛型的集合在把运行时的Exception转移到了编译时就处理!那个异常叫啥名我忘记了!
{:3_57:}
纯手打!我自己的见解!仅供参考!

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报 1 0
ò壞尛孩 发表于 2014-4-28 20:52
我的理解:
泛型和集合两个概念!但是泛型大部分都是应用在集合中,集合就是数据结构,是底层存放数据的不 ...

有点眉目了,数据结构果然不是盖的,但是树有二叉树,B+树B-树 、平衡二叉树也会有相对应的存储结构的集合?
回复 使用道具 举报
姜姗姗 发表于 2014-4-28 21:16
有点眉目了,数据结构果然不是盖的,但是树有二叉树,B+树B-树 、平衡二叉树也会有相对应的存储结构的集 ...

C++中是有的!但是JAVA有木有俺不知道了!当年数据结构俺可是一节课没落的听完的!全班就我一个男生90分!咯咯~好吧其余9个是女生!{:3_54:}
回复 使用道具 举报
姜姗姗 发表于 2014-4-28 21:16
有点眉目了,数据结构果然不是盖的,但是树有二叉树,B+树B-树 、平衡二叉树也会有相对应的存储结构的集 ...

C++中是有的!但是JAVA有木有俺不知道了!当年数据结构俺可是一节课没落的听完的!全班就我一个男生90分!咯咯~好吧其余9个是女生!{:3_54:}
回复 使用道具 举报
ò壞尛孩 发表于 2014-4-28 21:28
C++中是有的!但是JAVA有木有俺不知道了!当年数据结构俺可是一节课没落的听完的!全班就我一个男生90分 ...

我敢确定的就是java有,听你这么说C++中看来也是有,看来所有语言中都是应该有的,只是表现形式不同罢了
回复 使用道具 举报
比方说:一个ArraryList集合中可以存放多种数据类型,有时不便于操作,操作不当会出现问题。数据放进去就不知道什么类型了,不能防止非法数据的放入。
   但是泛型List<T>就不一样了啊,它是对数据类型的限制有,只能是一种数据类型,这样的话比方说这个泛型里放自定义的学生类型的数据,就不可以放int、bool等其他类型的数据了吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马