在java中将大数字转换为小数的算法

时间:2013-09-20 07:21:19

标签: java arrays algorithm indexing

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

1 个答案:

答案 0 :(得分:4)

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

//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 Hash Table

根据您的需要,Sparse Array是另一种可能更有效的选项。我对它们并不太熟悉,但据我所知,它与链表相似。 Android有一个您可以实现的实现,而且收集品也是suggested in another question