web-dev-qa-db-fra.com

Créer une liste de primitive int?

Est-il possible de créer une liste de primitives int ou des primitives en Java comme suit? 

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

Il semble que je peux faire List myList = new ArrayList();

et ajouter "int" dans cette liste. Mais alors cela voudrait dire que je peux ajouter n'importe quoi dans cette liste. 

Ma seule option est-elle de créer un tableau d'int et de le convertir en liste ou de créer une liste d'objets Integer? 

67
Susie

En Java, le type de toute variable est soit un type primitif, soit un type de référence. Les arguments de type génériques doivent être des types de référence. Les primitives n'étendant pas Object, elles ne peuvent pas être utilisées comme arguments de type générique pour un type paramétré.

Utilisez plutôt la classe Integer qui est un wrapper pour int:

List<Integer> list = new ArrayList<Integer>();

Si vous utilisez Java 7, vous pouvez simplifier cette déclaration à l'aide de l'opérateur diamond:

List<Integer> list = new ArrayList<>();

Avec l'autoboxing en Java, le type primitif int deviendra un Integer si nécessaire. 

La sélection automatique est la conversion automatique effectuée par le compilateur Java entre les types primitifs et leur wrapper d'objet correspondant Des classes.

Donc, ce qui suit est valide:

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);

System.out.println(list.get(0)); //prints 1
107
Kevin Bowersox

Non, aucune collection ne peut contenir des types primitifs lorsque Java Collection Framework est utilisé.

Toutefois, il existe d'autres collections Java prenant en charge les types primitifs, telles que: Trove , Colt , Fastutil , Goyave

Voici un exemple d’arraylist avec ints lorsque la bibliothèque Trove est utilisée:

 TIntArrayList list= new TIntArrayList();

Les performances de cette liste, comparées à celles de ArrayList of Integers from Java Collections, sont bien meilleures, car l'autoboxing/unboxing vers la classe Integer Wrapper correspondante n'est pas nécessaire.

23
Mike B

Est-il possible de créer une liste de primitives int ou de primitives en Java?

Non tu ne peux pas. Vous pouvez uniquement créer une liste de types de référence, telle que Integer, String ou votre type personnalisé.

Il semble que je puisse faire List myList = new ArrayList(); et ajouter "int" dans cette liste.

Lorsque vous ajoutez int à cette liste, elle est automatiquement encadrée dans le type d'emballage Integer. Mais c'est une mauvaise idée d'utiliser raw des listes de types, ou pour tout type générique d'ailleurs, dans du code plus récent.

Je peux ajouter n'importe quoi dans cette liste. 

Bien sûr, c'est le désavantage d'utiliser un type brut. Vous pouvez avoir Chat , Chien , Tigre , Dinosaure , dans un conteneur.

Est-ce ma seule option, créer un tableau d'int et le convertir en liste

Dans ce cas également, vous obtiendrez un List<Integer> uniquement. Il est impossible de créer List<int> ou des primitives.

Vous ne devriez pas être dérangé de toute façon. Même dans List<Integer>, vous pouvez ajouter un type primitif int. Il sera automatiquement encadré, comme dans l'exemple ci-dessous:

List<Integer> list = new ArrayList<Integer>();
list.add(5);
9
Rohit Jain

Essayez d’utiliser ArrayIntList à partir du framework Apache. Cela fonctionne exactement comme un arraylist, sauf qu'il peut contenir un int primitif. 

Plus de détails ici -

https://commons.Apache.org/dormant/commons-primitives/apidocs/org/Apache/commons/collections/primitives/ArrayIntList.html

6
stolen_leaves

Ce n'est pas possible. La spécification Java interdit l'utilisation de primitives dans les génériques. Cependant, vous pouvez créer ArrayList<Integer> et appeler add(i) si i est un entier grâce à la boxe.

5
Andrey Akhmetov

Vous pouvez utiliser les collections primitives disponibles dans Collections Eclipse . Eclipse Collections a List, Set, Bag et Map pour toutes les primitives. Les éléments des collections de primitives sont conservés en tant que primitives et aucune boxe n’a lieu.

Vous pouvez initialiser un IntList comme ceci:

MutableIntList ints = IntLists.mutable.empty();

Vous pouvez convertir un List<Integer> en IntList comme ceci:

List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);

Remarque: je contribue aux collections Eclipse.

4
Nikhil Nanivadekar

Les collections utilisent des génériques qui prennent en charge/ types de référence ou wilcards. Vous pouvez cependant utiliser un wrapper Integer

List<Integer> list = new ArrayList<>();
2
Reimeus

Existe-t-il un moyen de convertir un tableau Integer [] en un tableau int []?

Cette omission flagrante des bibliothèques du noyau Java semble se retrouver dans presque tous les projets sur lesquels j'ai travaillé. Et aussi pratique que puisse être la bibliothèque Trove, je ne suis pas en mesure d'analyser les conditions requises pour répondre à LPGL pour une application Android liant de manière statique une bibliothèque LGPL (le préambule dit ok, le corps ne semble pas en dire autant). Et il est tout simplement gênant d’utiliser des sources Apache pour récupérer ces classes. Il doit y avoir une meilleure façon.

0
Robin Davies

Lorsque vous utilisez le développement Java pour Android, il est recommandé d'utiliser SparseIntArray pour empêcher l'autoboxing entre int et Integer.

Vous trouverez plus d’informations sur SparseIntArray dans la documentation relative aux développeurs Android et une bonne explication de la sélection automatique sur Android entrez la description du lien ici

0
Stefan Medack

En outre, vous pouvez trouver un bon résumé de Liste des valeurs entières primitives en Java dans mon article récent sur Baeldung. 

0
mherBaghinyan