繁体   English   中英

Java 数据结构,用于任意大量元素且大于 Integer.MAX_VALUE

[英]Java data structure for an arbitrary large number of elements and larger than Integer.MAX_VALUE

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

从理论上讲,使用带有 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 实现也可能是一个很好的实现。 然而,地图返回一个整数大小,我找不到关于 map 是否可以处理超过 Integer.MAX_VALUE 的参考。 我搜索了 TreeMap 和 HashMap。 是否有这样一个任意大小的数据结构可用?

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

该问题背后的动机是确定一个简单的解决方案,而不依赖于 memory 数据库。 例如,当 64 位数组将是一个很好的解决方案时。 memory 数据库中的一个提供了更多可能不需要并且可能可以避免的功能。

没有任何答案,也没有找到易于实施和高效的解决方案,我会说使用 memory 数据库是 go 的最简单方法。 memory 数据库的列表可以在 Wikipedia 中找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM