【问题标题】:Can I manipulate a hashmap to store multiple datatypes? [duplicate]我可以操纵哈希图来存储多种数据类型吗? [复制]
【发布时间】:2017-04-27 21:57:43
【问题描述】:

我有一个哈希图,它以字符串形式存储键,以值形式存储整数。

    HashMap<String, Integer> Items;

我想在其中存储多种数据类型,而我所查找的内容只有在 Hashmap 的所有值元素都具有相同数据类型时才能解决问题。

在 Hashmap 中有多种数据类型吗

HashMap<String, Integer, BigDecimal, Date> items;

我知道可以将其中一种数据类型的多个值存储为数组列表之类的东西,但这仍然只允许我选择一种数据类型。

我可以使用另一个允许存储多种数据类型的集合吗?

谢谢

【问题讨论】:

  • 只是把这个扔在那里......为什么?
  • 这个问题闻起来强烈XY Problem。当然,您可以使用非通用 Map,但更大的问题是 1) 为什么您要这样做,以及 2) 可能有更好的方法来解决您正在尝试的任何整体问题解决。我的建议:寻找这些其他方法。如果您需要我们的帮助,请告诉我们更多关于整体问题的信息,而不是您试图解决问题的有问题的方式,从而改进问题。
  • HashMap&lt;String, OtherClassWithTheFieldsYouWant&gt;怎么样
  • @JoeC:是的,你用几句话就说出了我在很多时候都很难说的话。

标签: java collections hashmap


【解决方案1】:

将这些数据类型包装到一个覆盖hashCodeequals 的类中。 (我把它留给读者作为练习。)

public class Amalgam {
    private Integer field1;
    private BigDecimal field2;
    private Date field3;
}

那么你就可以直接使用Map了。

Map<String, Amalgam> items = new HashMap<>();

【讨论】:

    【解决方案2】:

    您可以使用所有要存储的类型的超类。如果您想存储不同类型的数字,例如可以这样做

    HashMap<String, Number> items;
    

    你可以通过这个一直到Object

    HashMap<String, Object> items;
    

    让您基本上可以在其中存储任何东西。

    但是,根据您的操作,这可能会对性能产生负面影响,因为可能需要 instanceof-checks 和强制转换。

    【讨论】:

      【解决方案3】:

      试试这个,

      HashMap<String, Object> items;
      

      但取回物品时要小心

      【讨论】:

      • “你必须小心” 没有太大帮助,你可能想详细说明那部分。
      • @domdom 哦,加油!! :P
      • “你必须小心”在 best 时是慷慨的。小心甚至没有描述它。您必须基本上知道每个键的每个值类型是什么。
      • @Makoto 或多或少。您总是可以进行实例检查,但这显然会削弱性能。
      • @Makoto 我把它留给读者作为练习;)
      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 2017-08-29
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      相关资源
      最近更新 更多