Java HashMap<;长字符串>;和HashMap<>;?

Java HashMap<;长字符串>;和HashMap<>;?,java,collections,Java,Collections,两者的区别是什么 Map map = new HashMap<Long, String>(); Map Map=newhashmap(); 及 Map Map=newhashmap(); 哪个更好用?为什么?规范HashMap()只是针对参数类型。但是您所展示的两个用例都是不好的(我只是认为它是错误的),因为map对象没有参数类型。你应该做的是 Map<Long, String> map = new HashMap<Long, String>(); M

两者的区别是什么

Map map = new HashMap<Long, String>();
Map Map=newhashmap();

Map Map=newhashmap();

哪个更好用?为什么?

规范
HashMap()
只是针对参数类型。但是您所展示的两个用例都是不好的(我只是认为它是错误的),因为
map
对象没有参数类型。你应该做的是

Map<Long, String> map = new HashMap<Long, String>();
Map Map=newhashmap();
这和

Map<Long, String> map = new HashMap<>();
Map Map=newhashmap();
这两行之间的唯一区别是您是否希望依赖JDK的自动类型推断

附录:

  • 正如Boris所确认的,在JDK7之前,自动类型推断是不可能的,第二种初始化映射的方法也不会编译
  • 如果您使用的是IDE(真的希望如此),请注意有关未经处理使用参数化类型的警告

  • 实际上应该是
    Map Map=newhashmap()中的两个字段表示映射的键和值类型。所以在这个例子中,它是一个字符串映射,它被长值引用。在声明中包含它们将强制映射确保映射只能具有特定的键/值类型。过去,类型必须包含在作业的
    中,但自Java 7以来就不再需要了。

    您可能需要阅读泛型:您阅读过文档了吗?了解a和a是什么在您的示例中,
    Long
    将是键的类型,
    String
    将是值的类型。不能有没有泛型类型的HashMap。@MC10当然可以。它被称为原始类型,应该不惜一切代价避免它,后者不会编译Java 7++之前的版本。我不确定JKD7之前的版本,只是在谷歌上确认一下!
    Map<Long, String> map = new HashMap<>();