Как определить, больше ли размер очереди, чем max int?

1

Есть ли способ получить размер java.util.Queue, размер которого превышает max int, без необходимости создавать вокруг него обертку? Другие библиотеки могут быть?

  • 0
    Вы имеете в виду java.util.Queue ?
  • 0
    да ...........
Теги:
collections
max
int
queue

3 ответа

1
Лучший ответ

Я думаю, это должно сработать

    long size = 0;
    for(Iterator i = queue.iterator(); i.hasNext(); i.next()) {
        size++;
    }
    return size > Integer.MAX_VALUE;
1

Теоретически да. Вы можете использовать неприятное отражение, чтобы сломать абстракцию и копаться в структурах данных реализации очереди. Но это действительно плохая идея.

Если вам действительно нужны очереди такого размера, вам почти наверняка понадобится отдельный класс очереди 1. В этот момент вы можете легко включить пользовательский getter в ваш API, чтобы получить размер очереди в 64 бит.


1 - Очередь, поддерживаемая простым массивом, не сможет поддерживать больше 2 ^ 31 - 1 элементов, а связанная очередь с таким количеством элементов будет тратить много гигабайт памяти... не говоря уже о том, что основные расстройство желудка для ГК.

  • 0
    Это имеет смысл .. спасибо!
1

С технической точки зрения, я не думаю, что вы можете, по крайней мере, не модифицировать очередь.

Метод size унаследованный от коллекций, вернет maxint, если есть больше элементов, чем это, но он также вернет, что если есть точно столько элементов.

Таким образом, кроме выделения элемента и просмотра изменений размера, нет другого пути.

Это не мешает вам создать свою собственную очередь (с long размером), если это действительно важно.

Тем не менее, я видел очень мало случаев в моей долгой карьере, когда очереди становятся такими большими - вы можете переосмыслить, что вы делаете, они могут быть лучшим способом.

  • 0
    хм .. я думаю, что это должно быть достаточно хорошо для меня. Вы знаете какой-нибудь другой тип коллекции, который позволяет это?
  • 0
    Я использую его в модульном тесте, чтобы проверить количество собранных данных. Если он возвращает max int для размера больше этого, я думаю, что это должно решить мою цель. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню