Есть ли способ создать список примитивов int или любых примитивов в java, как показано ниже?
List<int> myList = new ArrayList<int>();
Кажется, я могу List myList = new ArrayList();
и добавьте "int" в этот список. Но тогда это означало бы, что я могу добавить что угодно в этот список.
Есть ли у меня единственный вариант - создать массив int и преобразовать его в список или создать список объектов Integer?
java
list
generics
collections
Сюзи
источник
источник
Ответы:
В Java тип любой переменной - это либо примитивный, либо ссылочный тип. Аргументы универсального типа должны быть ссылочными типами. Поскольку примитивы не расширяются,
Object
их нельзя использовать в качестве аргументов универсального типа для параметризованного типа.Вместо этого используйте
Integer
класс, который является оболочкой дляint
:List<Integer> list = new ArrayList<Integer>();
Если вы используете Java 7, вы можете упростить это объявление с помощью оператора ромба:
List<Integer> list = new ArrayList<>();
С автобоксингом в Java примитивный тип при необходимости
int
становится типомInteger
.Итак, верно следующее:
int myInt = 1; List<Integer> list = new ArrayList<Integer>(); list.add(myInt); System.out.println(list.get(0)); //prints 1
источник
Нет, нет никакой коллекции, которая может содержать примитивные типы, когда используется Java Collection Framework.
Однако есть и другие коллекции java, которые поддерживают примитивные типы, например: Trove , Colt , Fastutil , Guava.
Пример того, как будет выглядеть arrayylist с int при использовании библиотеки Trove:
TIntArrayList list= new TIntArrayList();
Производительность этого списка по сравнению с ArrayList целых чисел из коллекций Java намного лучше, поскольку автоматическая упаковка / распаковка в соответствующий класс Integer Wrapper не требуется.
источник
Нет, не можешь. Вы можете только создать список ссылочных типов, как
Integer
,String
или пользовательский тип.Когда вы добавляете
int
в этот список, он автоматически упаковывается вInteger
тип оболочки. Но использовать списки необработанных типов или любой общий тип в этом отношении в новом коде - плохая идея .Конечно, это недостаток использования необработанного типа. Вы можете иметь кошку , собаку , тигра , динозавра в одном контейнере.
В этом случае вы также получите
List<Integer>
только. Нет никакого способа создатьList<int>
или примитивы.В любом случае не стоит беспокоиться. Даже в
List<Integer>
вы можете добавитьint
примитивные типы. Он будет автоматически помещен в рамку, как в примере ниже:List<Integer> list = new ArrayList<Integer>(); list.add(5);
источник
Попробуйте использовать ArrayIntList из фреймворка apache. Он работает точно так же, как Arraylist, за исключением того, что может содержать примитивный тип int.
Подробнее здесь -
https://commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/ArrayIntList.html
источник
Это невозможно. Спецификация java запрещает использование примитивов в дженериках. Тем не менее, вы можете создавать
ArrayList<Integer>
и вызывать,add(i)
еслиi
это int, благодаря боксу.источник
Вы можете использовать примитивные коллекции, доступные в Eclipse Collections . Затмения коллекции есть
List
,Set
,Bag
иMap
для всех примитивов. Элементы в примитивных коллекциях поддерживаются как примитивы, без упаковки.Вы можете инициализировать IntList следующим образом:
Вы можете преобразовать из a
List<Integer>
вIntList
следующее:List<Integer> integers = new ArrayList<>(); MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
Примечание: я участвую в Eclipse Collections.
источник
Коллекции используют универсальные шаблоны, которые поддерживают ссылочные типы или символы wildcards. Однако вы можете использовать
Integer
оберткуList<Integer> list = new ArrayList<>();
источник
При использовании Java для разработки под Android рекомендуется использовать
SparseIntArray
для предотвращения автобокса междуint
иInteger
.Вы можете найти дополнительную информацию
SparseIntArray
в документации для разработчиков Android и хорошее объяснение для автобокса на Android, введите описание ссылки здесьисточник
SparseIntArray
, часто это лучший вариант, но есть компромиссы, о которых следует знать. «Реализация не предназначена для использования в структурах данных, которые могут содержать большое количество элементов. Обычно она медленнее, чем традиционная HashMap ...»Это грубое упущение из основных библиотек Java, кажется, встречается практически в каждом проекте, над которым я когда-либо работал. И сколь бы удобной ни была библиотека Trove, я не могу проанализировать точные требования для соответствия LPGL для приложения Android, которое статически связывает библиотеку LGPL (в преамбуле написано хорошо, тело, похоже, не говорит то же самое). И просто неудобно копировать и удалять исходные коды Apache, чтобы получить эти классы. Там должен быть лучший способ.
источник
Коллекция Java должна быть только коллекцией объектов.
List<Integer> integerList = new ArrayList<Integer>();
Целое число - это класс-оболочка примитивного типа данных int.
больше из классов оболочки JAVA здесь !
U может напрямую сохранять и получать int в / из integerList как,
integerList.add(intValue);
int intValue = integerList.get(i)
источник