Java HashMap<Integer, Integer> 与 int[]

Java HashMap<Integer, Integer> vs int[]

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

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

N.B。在这种情况下,HashMap/array.

中仅使用奇数键

显然,两者都提供了从整数子集到整数的映射。存在一些差异,但简短的回答是,数组可能更适用于密集键,而 HashMap 更适用于稀疏键。

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

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

如果您希望使用多达 50% 的条目,则最好使用数组。如果只需要奇数键,且数组很大,可以考虑使用数组索引(i-1)/2来表示键为i.

的元素

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

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

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

一张地图散列映射是:key --> value。在哈希映射中,您可以通过键检索值。

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) 所以选择最适合你的。