130 votes

Créer une liste d'int ? primitifs

Existe-t-il un moyen de créer une liste de primitives int ou toute autre primitive en java comme suit ?

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

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

et ajouter "int" dans cette liste. Mais 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 ?

174voto

Kevin Bowersox Points 48223

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érique doivent être des types de référence. Puisque les primitives n'étendent pas Object ils ne peuvent pas être utilisés comme arguments de type générique pour un type paramétré.

Utilisez plutôt le Integer qui est une enveloppe pour int :

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

Si vous utilisez Java 7, vous pouvez simplifier cette déclaration en utilisant l'opérateur diamant :

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

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

L'Autoboxing est la conversion automatique que fait le compilateur Java entre les types primitifs et leurs classes d'enveloppes d'objets correspondantes. correspondantes.

Ce qui suit est donc valable :

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

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

29voto

Mike B Points 350

Non, il n'existe pas de collection pouvant contenir des types primitifs lorsque le cadre de collection Java est utilisé.

Cependant, il existe d'autres collections java qui supportent les types primitifs, tels que : Trove , Colt , Fastutil , Goyave

Voici un exemple de ce que serait une liste de tableaux avec des ints lorsque la bibliothèque Trove est utilisée :

 TIntArrayList list= new TIntArrayList();

Les performances de cette liste, comparées à celles de la liste de tableaux d'entiers de Java Collections, sont bien meilleures, car il n'est pas nécessaire d'effectuer un transfert automatique vers la classe enveloppe d'entiers correspondante.

9voto

Rohit Jain Points 90368

Existe-t-il un moyen de créer une liste d'int primitifs ou de toute autre primitive en java ?

Non, vous ne pouvez pas. Vous pouvez seulement créer des listes de types de référence, comme 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, il est automatiquement mis en boîte à Integer type d'emballage. Mais c'est une mauvaise idée d'utiliser brut ou pour tout autre type générique, dans le code le plus récent.

Je peux ajouter n'importe quoi dans cette liste.

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

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

Dans ce cas également, vous obtiendrez un List<Integer> seulement. Il n'y a aucun moyen de créer List<int> ou toute autre primitive.

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

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

7voto

stolen_leaves Points 31

Essayez d'utiliser l'ArrayIntList du framework apache. Il fonctionne exactement comme un tableau, sauf qu'il peut contenir des int primitifs.

Plus de détails ici -

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

5voto

hexafraction Points 16201

Cela 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 int grâce à la boxe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X