我有一个大小为10000的整数数组,它逐渐填充其他整数(context:http://uva.onlinejudge.org/external/1/100.pdf),但它不够大。我打算用HashMap替换它,并想知道这是否比使数组任意大一些更好(例如将大小增加到100000)?
另外,HashMap和整数数组之间的主要区别是什么?
N.B。在这种情况下,HashMap /数组中只使用奇数键。
答案 0 :(得分:3)
您使用的每个密钥的内存成本对于数组来说将是32位,但是对于HashMap来说是几倍。范围内但不使用的每个键的内存成本对于数组也是32位,但对于HashMap可以接近于零。
数组访问将比HashMap访问更快。
如果您希望使用多达50%的条目,那么使用该阵列会更好。如果只需要奇数键,并且数组很大,请考虑使用数组索引(i-1)/2
来表示具有键i
的元素。
找到哪种更适合您的情况的最佳方法,包括找到在它们之间切换的密度阈值,是通过测试。这是我要遵循的程序:
答案 1 :(得分:0)
数组是值列表。 int数组是整数列表。您可以通过索引访问元素。
地图分配哈希映射是:key - >值。在哈希映射中,您可以通过键检索值。
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) 所以选择最适合你的。