【发布时间】:2012-10-09 17:43:25
【问题描述】:
我需要 Matlab 中的类似 hashmap 的功能,其中 hashmap 将向量映射到其他向量,而向量的数量(范围为数十万)是事先不知道的。
我尝试了 Matlab 的内置 Containers.Map,但它不接受向量作为键。然后我尝试了 java.util.HashMap:
>> map = java.util.HashMap;
>> map.put(1:3,zeros(2,1));
>> map.get(1:3)
ans =
[]
所以由于某种原因,这似乎不起作用,即使 Java 的 HashMap 应该能够将数组映射到数组。
另一种选择是保留两个单独的矩阵,一个用于键,一个用于值,并逐步增长它们。但我真的不想这样做,因为 Matlab 中增量增长的痛苦(即使是块大小增量等,例如here)。
问题: 1、为什么Java的HashMap在这里不起作用? 2. 还有其他方法吗?
谢谢。
【问题讨论】:
-
键向量中的值的范围是多少?如果它们是 2^16 以下的整数,您可以将它们转换为
char并将生成的有趣字符串用作键。 -
感谢大家的回答。键向量确实是 2^16 以下的整数,所以我比较了使用带有 char 键的 container.Map 和 java 的 HashMap,其键类似于 Rasman 链接到的帖子:好的,这里发布的代码太多,所以我将其作为答案发布.
-
再想一想,您可以使用任何关键向量值来执行此操作,而不仅仅是 ints typecast 在字符中粘贴任意值的位模式,例如
charKey = char(typecast(key, 'uint16'))。 -
@Andrew:我错过了你的最后一条评论。出于某种原因,我没有收到电子邮件通知。 {typecast} 不能导致冲突吗? IE。两个不同的数字 > 2^16 给出相同的类型转换?
标签: java matlab hashmap hashtable