Вектор Java или ArrayList для примитивов - PullRequest
21 голосов
/ 19 августа 2009

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

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

Ответы [ 5 ]

35 голосов
/ 19 августа 2009

К сожалению, нет такого класса , по крайней мере, в 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
13 голосов
/ 19 августа 2009

http://trove4j.sourceforge.net/

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

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

(лицензия LGPL)

5 голосов
/ 19 августа 2009

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

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

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

5 голосов
/ 19 августа 2009

Joda-примитивы .

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

2 голосов
/ 07 сентября 2016

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

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

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