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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凝聚 中级黑马   /  2013-10-8 08:47  /  1732 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凝聚 于 2013-10-8 14:20 编辑

HashMap<String,String> m=new HashMap<String,String>();
Map<String,String> m=new HashMap<String,String>();
请问这两句代码有什么区别啊?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 狼人→浪人 于 2013-10-8 09:22 编辑

Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

HashMap是Map的实现类,Map是接口不支持new Map()新建对象,而HashMap实现了Map中的抽象方法。那么实现类肯定是可以new HashMap()出对象的。

接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建。
【接口名】 【对象名】=new 【实现接口的类】,这样你想用哪个类的对象就可以new哪个对象,
统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同我用接口来定义对象不就可以做到统一访问了吗?
接口主要针对多个类实现它来说的,要是只有一个类当然可以不用接口了。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
第二个是多态的应用,将父类接口的变量指向子类的对象,这样在运行的时候才动态的确定调用了哪个子类的函数,有较好的灵活性

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
这个一般情况下都是用接口来声明的,第一句没有问题,是实现一个类,第二句是在前面使用接口来创建的,
Map<String,String> m=new HashMap<String,String>(); 这样的写法就是你可以随时修改这个具体的实现,这种写法比较省资源。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 1 0
我来回答,.~ 第2句跟灵活,~    第一句都锁定死呢,  第2句是用多态,  父类下面可以用很多子类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马