0

我有一组从 1 到 100 000 000 000 的数字。但总量不超过 50 000。似乎可以创建具有 50 000 个元素的对象数组。所以我可以通过索引从数组中获取元素,这非常快 - 如果我拥有从 1 到 50 000 的所有这些数字。是否可以使用一些函数来映射从 1 到 50 000 范围内的数字?在这种情况下,要找到对象,我只计算索引!

4

1 回答 1

4

您所描述的是hashmap。它使用对,其中第一个值是它所引用的“键”,第二个是实际存储的“值”。

//49,999 is the initial size and .8F (80%) is the load factor
//Sizes that are prime numbers are usually more efficient
HashMap<Integer, Long> hashMap = new HashMap<>(49999, .8F);

//Save first value of 1,000,000,00
Integer intKey = 1;
Long lngValue = 1000000000;
hashMap.put(intKey, lngValue);

//Retrieve first value
lngValue = hashMap.get(intKey);

//Retrieve a list of all the Keys saved in the map
Integer[] intKeys = (Integer[])hashMap.keySet().toArray();

//Retrieve a list of all the saved Values
Long[] lngValues = (Long[])hashMap.values().toArray();

通常你会希望负载率在 70% 到 80% 左右,这样它就有足够的空间让它高效工作。较高的负载因子会减少内存浪费,但会在开始填满时降低性能。

YouTube 上的 Derek Banas 有一些关于哈希函数如何工作以及如何使用它们的很棒的教程。如果您还不太熟悉它们,它们绝对值得一试。

Java 哈希表

对于您需要的Sparse Array是另一种可能在这里更有效的选择。我对它们不太熟悉,但据我了解,它类似于链表。Android 有一个您可能能够实现的实现,并且在另一个问题中也建议了 trove 集合。

于 2013-09-20T08:18:41.477 回答