繁体   English   中英

java中这两个对象初始化有什么区别?

[英]what is the difference between these two object initialization in java?

如果我使用:

    HashMap<String, Integer> test = new HashMap<String, Integer>();

或者我使用:

    HashMap test = new HashMap();

我可以在测试对象上应用的其他方法有什么不同。 像test.put(),test.get()等,如果初始化不同??

此外,如果我在测试对象中放置一些东西,例如:

    test.put("One", new Integer(5));
    test.put("Two", new Integer(4));
    test.put("Three", new Integer(3));

并将其显示为:

设置set = tokens.entrySet();
Iterator ik = test.iterator();

    while(ik.hasNext()){
      Map.Entry me = (Map.Entry)ik.next();
      System.out.println(me.getKey() + " : " + me.getValue() );

结果没有排序,restul是:

三:3一:5两:1

它遵循什么规则? 输出的这种正常行为是否随机显示?

在第一种情况下,Hashmap键必须是字符串,值必须是整数。 编译器将执行相应的类型检查。 在第二种情况下,可以使用任何类型的对象。

您的HashMap条目以随机顺序打印是完全正常的。 如果要保留订单,请改用LinkedHashMap。

在第一个示例中,您只能将字符串作为键和整数作为值,但在第二个示例中,您可以将任何内容放到地图中,编译器无法帮助您获得类型安全性。

阅读有关Java Generics如何工作的更多信息。

是的,在使用HashMap时,您将获得“随机”迭代顺序。 如果您需要具有可预测迭代顺序的Map实现,请查看LinkedHashMap

我认为这取决于你的用法,如果你需要一个编译器允许你只添加String作为Key和Integer作为值,那么你需要指定两个参数类型,否则如果你需要传递任何没有任何限制的东西然后使用第二个一。

在第一种情况下,key必须是String,value必须是Integer。

在第二种情况下,键和值可以是任何类型的对象。

HashMap和HashSet不保证插入顺序。 如果希望它保持插入值的顺序,请尝试使用LinkedHashMap。 在此之前的StackOverflow问题中回答了更清楚的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM