【问题标题】:Storing an Array in a HashMap as its value在 HashMap 中存储一个数组作为它的值
【发布时间】:2014-05-20 00:46:04
【问题描述】:

我想将浮点数组存储为 HashMap 的值。

HashMap<Integer, Float[]> vFeatureHm = new HashMap<Integer, Float[]>();

这里的浮点数组包含指定数量的值,例如 10。我如何以及在哪里提到它?我将动态地将值添加到该数组中。我可以使用 ArrayList,但我将它用于矩阵类型的结构,并且我很容易从索引中获取值,因为值是按该顺序存储的。在这种情况下,ArrayList 对我来说似乎是一种矫枉过正。你能建议如何解决这个问题。目前,我开始使用 ArrayList,但我想知道是否有我上面提到的使用方法。

更新:我意识到 ArrayList 不适用于我的情况,因为我需要放置在特定索引中。所以我必须使用上面提到的格式或使用 HashMap ,这又是一种过度杀戮。上面提到的使用 Float 有什么建议吗?

【问题讨论】:

  • 你只有 1 个 10 个值的浮点数组,还是多个这样的数组?您用作 HashMap 键的 Integer 的作用是什么?
  • 你应该考虑使用 Guava Table:code.google.com/p/guava-libraries/wiki/…
  • @PNS 我有一个电影 ID 列表,每部电影有 10 个功能。 movieID 不是按顺序排列的(假设有 1000 部电影,最高的电影 ID 可以是 9338)。但是所有的电影都将并且必须具有相同的 10 个功能。所以地图的键是一个movieID,值是10个值的浮点数组。我不能保留这个数组列表,因为索引很重要。
  • @OmarHrynkiewicz,感谢您的意见。它看起来像我想要的那样做,但正如我所提到的,我不想使用地图,因为它们似乎对我来说太过分了。我想知道我们是否可以用数组来做到这一点。

标签: java arrays arraylist hashmap


【解决方案1】:

您不需要指定Float[] 数组的维度。

该数组是 ObjectvFeatureHm 映射的任何其他值一样,因此任何边界检查都与 HashMap 无关(当然它可以在代码的另一部分执行)。

【讨论】:

  • 谢谢。这有帮助。我错过了 Float[] 只是另一个对象。我像下面这样初始化它。 Float[] featureValues = uFeatureHm.get(userid); if(featureValues == null){ featureValues = new Float[Settings.noOfCommonFeatures]; featureValues[fi-1] = fv; uFeatureHm.put(userid, featureValues); }else{ featureValues[fi-1] = fv; }
  • 假设你在上面的代码中使用的变量是定义好的并且是一致的,你应该没问题。
【解决方案2】:

因为 float 是一个对象,所以我像下面这样初始化它。

Float[] featureValues = uFeatureHm.get(userid);
if(featureValues == null){
    featureValues = new Float[Settings.noOfCommonFeatures];
    featureValues[fi-1] = fv;
    uFeatureHm.put(userid, featureValues);
}else{
    featureValues[fi-1] = fv;
}

稍后,我可以简单地以uFeatureHm.get(userid)[featureIndex] 访问特定用户的功能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2015-02-17
    • 2013-07-14
    相关资源
    最近更新 更多