Вектор Java или ArrayList для примитивов

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

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

5 ответов

Решение

К сожалению, такого класса нет, по крайней мере, в Java API. Есть Primitive Collections для 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

http://trove4j.sourceforge.net/

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

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

(Лицензия LGPL)

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

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

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

Йода-Примитивы.

Существует также Primitive Collections для Java, но она немного устарела.

http://www.eclipse.org/collections/ имеет примитивные списки массивов для всех примитивных типов, а также примитивные наборы, сумки, стопки и карты. Существуют также неизменяемые версии всех типов примитивных контейнеров.

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

Другие вопросы по тегам