请问以下这两种方式有什么具体的区别?

  1. 请问这两种实现方式有什么具体的区别?

2.HashMap<String, Object> map1 = new HashMap<String, Object>();

Map<String, Object> map2 = new HashMap<String, Object>();

3.上面的 map1 和 map2 的实现具体有什么区别吗?

阅读 2k
2 个回答

new HashMap<String, Object>()语句是创建泛型类HashMap的一个实例,map1和map2是引用,它们的类型不同,但它们都指向HashMap实例。

引用map1的类型就是HashMap泛型类,这没什么好说的。

引用map2的类型是Map泛型接口,HashMap泛型类实现了Map泛型接口,所以Map泛型接口类型的引用可以指向HashMap实例。

二者指向的实例类型是一样的,但因为map1和map2类型不一样,所以可以调用的方法不一样,map1可以调用HashMap的所有方法,包括Map的所有方法,但map2只能调用Map的方法,不能调用其他HashMap方法,虽然它指向的是一个HashMap对象。

题主想问的是 声明变量 mp1 是 HashMap 类型,和 map2 的 Map 类型之间的区别吗?

还是建议楼主买本书,或者找个教程看看,这类问题过于基础,还是应该首先自己解决。

等号前面的是变量声明,就是说这个变量应该是什么类型的变量,等号右边是变量具体的实例,也就是实际上这个变量是什么东西。

对于题主的问题 map1 和 map2 实际上都是 HashMap 的实例,所以没有区别。但是在声明变量的时候一个是 Map ,一个是 HashMap

Map 是接口类,什么是接口类,请百度。
HashMap 是 接口 Map 的具体实现类。

Map 还有其他的实现类,比如: HashTable, ConcurrentHashMap 等等..

map1 和 map2 有什么区别? map2 = new HashTable() , mp2 = new ConcurrentHashMap() 都是对的。map1 则只能是 map1 = new HashMap(); 因为 map1 声明的变量类型是 HashMap; 而 Map 相当于是 HashMap,HashTable,ConcurrentHashMap 的父类,用父类声明,其具体的实例可以是其任意子类。

子类拥有接口父类的所有方法实现,但不同的子类有各自不同的实现方式,以应对不同的场景,各个具体实现区别请百度。

针对本题,两种声明方式,在使用上没有什么区别

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题