Создать список примитивных int?
Есть ли способ создать список примитивных int или любых примитивов в java, как показано ниже?
List<int> myList = new ArrayList<int>();
Кажется, я могу сделать List myList = new ArrayList();
и добавьте "int" в этот список. Но тогда это означало бы, что я могу добавить что-нибудь в этот список.
Является единственным моим вариантом, создавая массив int и преобразовывая его в список или создавая список объектов Integer?
Ответы
Ответ 1
В Java общие аргументы типа должны быть объектами. Поскольку примитивы не расширяют Object
, они не могут использоваться в качестве аргументов общего типа для параметризованного типа.
Вместо этого используйте класс Integer
, который является оберткой для int
:
List<Integer> list = new ArrayList<Integer>();
Если вы используете Java 7, вы можете упростить эту декларацию с помощью оператора алмаза:
List<Integer> list = new ArrayList<>();
При автобоксинге в Java примитивный тип int
при необходимости станет Integer
.
Autoboxing - это автоматическое преобразование, которое компилятор Java делает между примитивными типами и их соответствующей оберткой объекта классы.
Итак, справедливо следующее:
int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);
System.out.println(list.get(0)); //prints 1
Ответ 2
Нет никакой коллекции, которая может содержать примитивные типы, когда используется Java Collection Framework.
Однако существуют и другие коллекции java, которые поддерживают примитивные типы, такие как: Trove, Colt, Fastutil, Guava
Пример использования arraylist с ints при использовании библиотеки Trove Library:
TIntArrayList list= new TIntArrayList();
Производительность этого списка по сравнению с ArrayList из целых чисел из коллекций Java намного лучше, так как автоматическое использование/распаковка в соответствующий класс Integer Wrapper не требуется.
Ответ 3
Есть ли способ создать список примитивных int или любых примитивов в java
Нет, вы не можете. Вы можете создавать только список ссылочных типов, например Integer
, String
или свой собственный тип.
Кажется, я могу сделать List myList = new ArrayList();
и добавить "int" в этот список.
Когда вы добавляете int
в этот список, он автоматически привязывается к типу Integer
wrapper. Но плохой идеей использовать исходные типы списков или для любого общего типа, если на то пошло, в более новом коде.
Я могу добавить что-нибудь в этот список.
Конечно, это недостаток использования raw-типа. Вы можете иметь Кошку, Собака, Тигр, Динозавр, все в одном контейнере.
Я единственный вариант, создающий массив int и преобразовывающий его в список
В этом случае вы получите только List<Integer>
. Невозможно создать List<int>
или любые примитивы.
В любом случае вы не должны беспокоиться. Даже в List<Integer>
вы можете добавить примитивные типы int
. Он будет автоматически вставлен в коробку, как показано ниже:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
Ответ 4
Попробуйте использовать ArrayIntList из фреймворка apache. Он работает точно так же, как аррайалист, за исключением того, что он может содержать примитивный int.
Подробнее здесь -
https://commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/ArrayIntList.html
Ответ 5
Это невозможно. Спецификация java запрещает использование примитивов в дженериках. Однако вы можете создать ArrayList<Integer>
и вызвать add(i)
, если i
является int благодаря боксу.
Ответ 6
Вы можете использовать примитивные коллекции, доступные в Eclipse Collections. Коллекции Eclipse имеют List
, Set
, Bag
и Map
для всех примитивов. Элементы в примитивных коллекциях сохраняются как примитивы, и бокс не имеет места.
Вы можете инициализировать IntList следующим образом:
MutableIntList ints = IntLists.mutable.empty();
Вы можете конвертировать из List<Integer>
в IntList
следующим образом:
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
Примечание. Я участвую в коллекциях Eclipse.
Ответ 7
В коллекциях используются дженерики, которые поддерживают ссылочные типы или wilcards. Однако вы можете использовать обертку Integer
List<Integer> list = new ArrayList<>();
Ответ 8
Есть ли способ преобразовать массив Integer [] в массив int []?
Это грубое упущение из основных ядровых библиотек Java, похоже, в значительной степени зависит от каждого проекта, над которым я когда-либо работал. И так же удобно, как библиотека Trove, я не могу разобрать точные требования для соответствия LPGL для приложения Android, которое статически связывает библиотеку LGPL (преамбула говорит, что нормально, тело, похоже, не говорит об этом). И просто неудобно идти с рип-и-зачищающими источниками Apache, чтобы получить эти классы. Должен быть лучший способ.
Ответ 9
При использовании разработки Java для Android рекомендуется использовать SparseIntArray
для предотвращения автобоксинга между int
и Integer
.
Вы можете найти дополнительную информацию в SparseIntArray
в документации разработчиков Android и хорошее объяснение автобоксинга на Android введите ссылку здесь
Ответ 10
Коллекция Java должна быть только коллекцией объектов.
List<int> intList = new ArrayList<int>();
совпадает с
List<Integer> integerList = new ArrayList<Integer>();
Integer - это класс-оболочка примитивного типа данных int.
больше из классов оболочки JAVA
здесь!
U может напрямую сохранять и получать int в /from integerList как,
integerList.add(intValue);
int intValue = integerList.get(i)