Java структура данных для произвольного большого количества элементов и больше, чем Integer.MAX_VALUE - PullRequest
0 голосов
/ 04 апреля 2020

Существует ли структура данных java, которая может хранить произвольно большое количество элементов? Предположим, что элементы также являются BigIntegers для простоты.

Теоретически использование массива с индексом BigInteger было бы приемлемо, поскольку установка и получение значений будут единственными необходимыми операциями. Но массив не может содержать больше, чем Integer.MAX_VALUE. (Или даже меньше, в зависимости от виртуальной машины, см. этот вопрос ).

Для реализации такой структуры данных простое (наивное) решение было бы создать его из 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. Структура данных предпочтительно хранится в памяти, поэтому решения на основе данных не рассматриваются. Например, вышеупомянутое также может быть реализовано путем сохранения значений в базе данных с индексом элемента, преобразованного в строку и используемым в качестве ключа строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...