Вопрос

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

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

Это было полезно?

Решение

есть, к сожалению нет такого класса, по крайней мере, в 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

Другие советы

http://trove4j.sourceforge.net/

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

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

(лицензия LGPL)

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

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

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

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

А также есть Примитивные коллекции для Java но это немного устарело.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top