当前位置: 首页 > 面试题库 >

初始化HashMap的正确方法,HashMap可以容纳不同的值类型吗?

滕成双
2023-03-14
问题内容

所以我对HashMapJava中的s 有两个问题:

  1. 初始化a的正确方法是HashMap什么?我认为在我的情况下最好使用:
    HashMap x = new HashMap();
    

但是Eclipse一直建议我使用:

    HashMap<something, something> map = new HashMap();

哪个更好?

  1. 可以HashMap将不同类型的对象/数据类型保存为值吗?例如,是否可以正常工作:
        map.put("one", 1);
    map.put("two", {1, 2});
    map.put("three", "hello");

在第一个中put(),我想要一个inta作为值​​,在第二个中,我想要int[]一个字符串。用HashMaps
在Java中可以吗?另外,可以将a HashMap作为值存储在HashMap?中吗?


问题答案:

这实际上取决于您需要哪种类型的安全性。最好的非通用方式是:

 Map x = new HashMap();

请注意,x键入为Map。这使将来更改实现(更改为TreeMapLinkedHashMap)变得容易得多。

您可以使用泛型来确保一定级别的类型安全:

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

在Java 7及更高版本中,您可以执行

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

上面虽然比较冗长,但却避免了编译器警告。在这种情况下的内容HashMap可以是任意Object,这样可以Integerint[]等这是你在做什么。

如果您仍在使用Java 6,则Guava库(尽管很容易自己做)具有一种称为的方法newHashMap(),该方法可以避免在执行时复制通用类型信息new。它从变量声明中推断类型(这是Java
7之前的构造函数不可用的Java功能)。

顺便说一句,当您添加一个int或其他原始类型时,Java会将其自动装箱。这意味着该代码等效于:

 x.put("one", Integer.valueOf(1));

您当然可以将a
HashMap作为值放置在另一个值中HashMap,但是我认为如果递归地进行操作(将HashMapa作为值​​本身放置)会出现问题。



 类似资料:
  • 我在我的程序中使用了HashMap,它工作得很好,但是我不明白HashMap的这些初始化之间的区别。 假设我正在实现一个HashMap,其中字符为键,整数为值。这两者之间有什么区别?

  • 问题内容: 我不熟悉Java,而是通过创建一个简单的NaiveBayes分类器进行练习的。我还是对象实例化的新手,想知道如何初始化HashMaps的HashMap。在将新观察值插入分类器时,我可以为给定类中的看不见的功能名称创建新的HashMap,但是我需要初始化吗? 请注意,这个问题并非专门针对朴素贝叶斯分类器,只是认为我会提供一些上下文。 问题答案: 是的,您需要对其进行初始化。 当您想向cl

  • 问题内容: 我应该传递什么值来为N个项目创建有效的/ 基于结构的结构? 在中,有效数字为N(N已假定未来增长)。a的参数应该是什么?((int)(N * 0.75d),0.75d)?更多?减?更改负载系数有什么影响? 问题答案: 关于负载因子,我将简单引用HashMap javadoc : 通常,默认负载因子(.75)在时间和空间成本之间提供了很好的折衷。较高的值会减少空间开销,但会增加查找成本(

  • 如果我写 而不是 或者与之相反 第一个在任何方面都不安全吗?

  • 问题内容: 这是我的情况。我正在使用两个java.util.HashMap将一些常用数据存储在Tomcat上运行的Java Web应用程序中。我知道每个Hashmap中的确切条目数。键分别是字符串和整数。 我的问题是,设置初始容量和负载系数的最佳方法是什么? 我是否应该将容量设置为等于其将要包含的元素数量,并将负载容量设置为1.0?我希望在不占用过多内存的情况下获得绝对最佳的性能。但是,恐怕该表无

  • 问题内容: 用RefluxJS异步初始化数据的正确方法是什么?是否有类似于AngularJS的解决方案,或者Flux的实现与此无关(路由器应该处理此职责)? 问题答案: 在应用程序的顶级组件中,使用方法(docs)触发获取数据的操作。最初渲染组件时将调用此方法。 例如: