Java Vector или ArrayList для примитивов
-
18-09-2019 - |
Вопрос
Есть ли в 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.