Java HashMap <integer,integer =“”> vs int [] </integer,>

时间:2015-01-06 00:44:32

标签: java arrays hashmap

我有一个大小为10000的整数数组,它逐渐填充其他整数(context:http://uva.onlinejudge.org/external/1/100.pdf),但它不够大。我打算用HashMap替换它,并想知道这是否比使数组任意大一些更好(例如将大小增加到100000)?

另外,HashMap和整数数组之间的主要区别是什么?

N.B。在这种情况下,HashMap /数组中只使用奇数键。

2 个答案:

答案 0 :(得分:3)

显然,两者都提供了从整数子集到整数的映射。有几个区别,但简短的回答是数组可能更适用于密集键和HashMap用于稀疏键。

您使用的每个密钥的内存成本对于数组来说将是32位,但是对于HashMap来说是几倍。范围内但不使用的每个键的内存成本对于数组也是32位,但对于HashMap可以接近于零。

数组访问将比HashMap访问更快。

如果您希望使用多达50%的条目,那么使用该阵列会更好。如果只需要奇数键,并且数组很大,请考虑使用数组索引(i-1)/2来表示具有键i的元素。

找到哪种更适合您的情况的最佳方法,包括找到在它们之间切换的密度阈值,是通过测试。这是我要遵循的程序:

  1. 为数据结构定义一个接口,该接口具有您需要对其执行的操作的方法。
  2. 编写代码,除了实际创建结构外,仅以该界面为准。
  3. 定义两个每个实现接口的类,一个使用数组,另一个使用HashMap。
  4. 使用每个类测量。对于HashMap,您还可以尝试使用HashMap构造函数参数。

答案 1 :(得分:0)

数组是值列表。 int数组是整数列表。您可以通过索引访问元素。

地图分配哈希映射是:key - &gt;值。在哈希映射中,您可以通过键检索值。

public class Book{}

HashMap<String, Book> books = new HashMap<String, Book>(); // mapping from a string(=key) to a Book object(=value)
books.put("Harry Potter", new Book());
// etc.

因此,如果您想通过密钥访问元素,那么哈希映射就是您所需要的。键必须是不可变的(如int或string) 所以选择最适合你的。