Java数据结构的任意大量元素和大于Integer.MAX_VALUE



是否存在可以存储任意大量元素的java数据结构?为了简单起见,我们假设这些元素也是BigIntegers。

理论上,使用带有BigInteger索引的数组是可以的,因为设置和获取值将是唯一需要的操作。但是一个数组不能包含超过Integer.MAX_VALUE.(或者更少,取决于依赖VM的情况,请参阅此问题(。

要实现这样的数据结构,一个简单(天真(的解决方案是从LinkedList创建一个数据结构,并具有一个外部BigInteger计数器。

类似的东西:

class MyArray{
private final BigInteger size;
private final LinkedList<BigInteger> list;
MyArray(BigInteger size){
//ommited for simplicity
}
public BigInteger get(BigInteger index){
//ommited for simplicity
//traverse the LinkedList using a BigInteger counter and get the element
}
public void set(BigInteger index,BigInteger element){
//ommited for simplicity. 
//traverse the LinkedList using a BigInteger counter and set the element
}
public BigInteger getSize(){
return size;
}
}

但是,应该可以进行一些优化。例如,不初始化尚未设置或获取的元素,或者缓存频繁请求的元素。从这个意义上说,Map实现也可能是一个很好的实现。然而,映射返回int大小,我找不到关于映射是否可以处理Integer.MAX_VALUE以上的引用。我搜索了TreeMap和HashMap。是否存在这样一个任意大小的数据结构?

其他一些限制。1-内存大小不被视为限制,但节省内存是一个好处。2-数据结构最好存储在内存中,因此不考虑使用数据库支持的解决方案。例如,上述内容也可以通过将值保存在数据库中来实现,其中元素的索引转换为String并用作String键。

这个问题背后的动机是在不依赖内存数据库的情况下确定一个简单的解决方案。例如,当64位阵列是一个好的解决方案时。内存数据库提供了更多可能不需要也可能可以避免的功能。

如果没有任何答案,也没有找到一个易于实现和高效的解决方案,我会说使用内存中数据库是最简单的方法。内存中数据库的列表可以在维基百科上找到。

最新更新