【问题标题】:Basic question on passing references of HashMaps关于传递HashMaps引用的基本问题
【发布时间】:2010-10-24 14:53:09
【问题描述】:

我已经定义了一个 HashMap,它使用双类型键和另一个 HashMap 作为值,如图所示

HashMap<Double, HashMap<Double, String>> HM1 = new HashMap<Double, HashMap<Double, String>>();

现在,对于这个 HashMap 的每个条目,我都有一个对不同 HashMap 的引用;其名称派生自此 HashMap 中该条目的键值。例如: 如果我在HM1中的key值为8,那么在“Alpha8”中要引用的HashMap的名称。如果 HM1 中的键值为 6,则在“Alpha6”中要引用的 HashMap 的名称。所以我将这些添加到 HashMap HM1 的语法是 HM1.put(8, Alpha8);和 HM1.put(6,Alpha6);

我的问题:

我从文本文件中读取的键值是预定义的。因此,我打开文件,编写一个扫描器对象来选择每个值并将其放入一个双精度类型变量keyvalue。然而,为了得到这个键的值,我定义了一个字符串 s1 = "Alpha"+keyvalue.toString();

我的主要问题是如何在我的 put 函数中传递这个字符串。因为如果我说 HM1.put(keyvalue, s1);它相当于传递一个双键和一个字符串值,而不是双键和对另一个 HashMap 的引用。对于原始数据类型,您可能可以包装,但对于 HashMap 引用,我不知道该怎么做。

【问题讨论】:

  • 我不明白你的地图为什么以及如何有名字。我想HM1的类型是HashMap&lt;Double, Map&gt;?
  • 如果你只在其中输入一个值,为什么还要使用第二层哈希图?
  • 我认为你的格式搞砸了——你的意思是HashMap&lt;Double, HashMap&lt;String, Integer&gt;&gt; HM1 = new HashMap&lt;Double, HashMap&lt;String, Integer&gt;&gt;()? (顺便说一下,我只是将 StringInteger 编成内部哈希表的键和值类型,因为您的文本没有说明它们是什么。)
  • 1.您可以使用 Double 作为哈希的键。您可以关闭“alpha”部分。 2. 因为如果我说 HM1.put(keyvalue, s1);... 我不明白这应该做什么。我希望HM1.put(Double d, Map&lt;String,String&gt;) 或类似的。发布更多代码!
  • 所以“哈希图的名称”是指引用哈希图的变量的名称?

标签: java reference hashmap


【解决方案1】:

假设您拥有所有可能的 Alpha* 引用...我将把这个逻辑放在一个简单的 if 条件中并这样做

if(keyvalue == 1) 
{
HM1.put(keyvalue, Alpha1)
} 
else(keyvalue == 2)
{

}
--

【讨论】:

  • 或者,将键值添加到哈希中,这样您就有了:HM1.put(anAlphaMap.get("keyvalue"), anAlphaMap); 并忘记所有 if 语句。
  • 谢谢约翰,但我的问题是我几乎有 350 个不同的键。另外,这些可能会在以后增加,否则我可以直接更新(如果你通过我的文本文件使用 hasNext() 而不是进入代码
  • 托尼,您能否详细说明您的评论?如果我没记错的话,除非我在 HashMap 中同时映射了键值和 Alpha(这是我正在努力的地方),否则我将无法获得特定 AlphaMap 的键值。请说明。真的很有帮助
  • @Swami - 如果我理解 Tony 正确,他想说的是收集所有可用的 alpha* 引用并将它们直接放入 HM1 而不从文件中读取“键值”,我建议同样的方法来解决您的问题,如果您只想要 HM1 中文本文件中的键值对,您首先使用 @Tony 的解决方案使用所有可用的 alpha* 引用构建您的 HM1,然后删除所有条目稍后在您的文本文件键值中不存在。希望我说得够清楚。
  • @swami - 你知道每个 'alpha' 哈希都需要它自己的 HM1 哈希键值。因此,将该键值放入特定的 alpha 哈希中。例如,如果您读取 alpha 散列 #102 的数据,则将“keyvalue”和 102.0 的键/值对添加到 alpha 散列中。现在每个 alpha 都有它需要在 HM1 中找到自己的东西。我不知道这对您的确切情况是否有帮助 - 我正在评论 @johnbk 解决方案中的 if/else。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多