Подтвердить что ты не робот

Создать список примитивных int?

Есть ли способ создать список примитивных int или любых примитивов в java, как показано ниже?

List<int> myList = new ArrayList<int>();

Кажется, я могу сделать List myList = new ArrayList();

и добавьте "int" в этот список. Но тогда это означало бы, что я могу добавить что-нибудь в этот список.

Является единственным моим вариантом, создавая массив int и преобразовывая его в список или создавая список объектов Integer?

4b9b3361

Ответ 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);

Ответ 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)