Java Vector или ArrayList для примитивов

Существует ли расширяемый класс массива в Java API, эквивалентный классу Vector или ArrayList, который может использоваться с примитивами (int, char, double и т.д.)?

Мне нужен быстрый расширяемый массив для целых чисел, и кажется бесполезным обернуть их в класс Integer, чтобы использовать их с Vector или ArrayList. Мой google-fu терпит неудачу.

Ответ 1

К сожалению, нет такого класса, по крайней мере, в Java API. Существует Примитивные коллекции для Java Сторонний продукт.

Очень опасно использовать авто-бокс вместе с существующими классами коллекции (в частности, реализацией List). Например:

List<Integer> l = new ArrayList<Integer>();
l.add(4);

l.remove(4); //will throw ArrayIndexOutOfBoundsException
l.remove(new Integer(4)); //what you probably intended!

И это также общий источник таинственного доступа NullPointerExceptions (возможно, через Map):

Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Hello", 5);
int i = m.get("Helo Misspelt"); //will throw a NullPointerException

Ответ 2

http://trove4j.sourceforge.net/

Библиотека Trove обеспечивает высокую скорость регулярные и примитивные коллекции для Java.

Обратите внимание, что поскольку Trove использует примитивы, типы, которые он определяет, не реализуют интерфейсы коллекции java.util.

(лицензия LGPL)

Ответ 4

Современная Java поддерживает автобоксирование примитивов, поэтому вы можете сказать

List<Integer> lst = new ArrayList<Integer>;
lst.add(42);

Это, по крайней мере, позволяет избежать синтаксического уксуса нового Integer (42).

Ответ 5

Eclipse Collections содержит примитивные ArrayLists для всех примитивных типов, а также примитивные наборы, пакеты, стеки и карты. Существуют также неизменные версии всех примитивных типов контейнеров.

Примечание. Я являюсь коммиттером для коллекций Eclipse.