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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 湛添友 中级黑马   /  2014-4-13 10:13  /  1105 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我知道返回值是collection,但是我不知道为什么是直接创建一个引用collection的对象来获取map.value();的。collection不是接口么,而map没有实现了collection接口。两者间是如何联系的?还有为什么返回值是collection就用collection来创建一个对象来获取返回值?(这个问题似乎很傻,但是我总觉得有点蒙蒙,似懂非懂的样子。。)
ArrayList<String> al=(ArrayList)map.values();这个我可以理解
Collection<String> c=map.values();  并没有向下转型 我觉得这就是
Collection<String>c=new Collection<String>();而这是不允许的吧?

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

3 个回复

倒序浏览
首先你要区分map和collection的区别。
  1,
  Map中一次存储是键值对。
  Collection中一次存储是单个元素。
  2,
  Map的存储使用的put方法。
  Collection存储使用的是add方法。  
  3,
  Map的取出,是讲Map转成Set,在使用迭代器取出。
  Collection取出,使用就是迭代器。
  4,
  如果对象很多,必须使用容器存储。
  如果元素存在着映射关系,可以优先考虑使用Map存储或者用数组,
  如果没有映射关系,可以使用Collection存储。

其次,在返回值的类型时候有规定,被定义的数据类型必须一致才能被返回。若不是,则会出错。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
可以通过接口来操作实现接口的类的对象,假如一个类实现了多个接口,可以以不同的接口来操作他,其实并没有生成接口对象,只是用这个接口来操作实现这个接口的类的对象,给你一段示例代码,这个类实现了两个接口,那么可以用这两个接口来操作这个类:
  1. public class InnerClass {

  2.         public static  void  main(String[] args) throws IOException {
  3.         mytest mytest=new mytest();
  4.         test1 t1=mytest;
  5.         test2 t2=mytest;
  6.         t1.showtest1();
  7.         t2.showtest2();
  8. }}
  9. interface test1{
  10.         void showtest1();       
  11. }
  12. interface test2{
  13.         void showtest2();       
  14. }
  15. class mytest implements test1,test2{
  16.         @Override
  17.         public void showtest1() {
  18.    System.out.println("interface test1");       
  19.         }
  20.         @Override
  21.         public void showtest2() {
  22.                 System.out.println("interface test2");       
  23.         }
  24. }
复制代码
你好好体会一下就行了。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
建议楼主把多态那部分仔细看一遍就懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马