Crear una lista de primitiva int?

¿Hay alguna manera de crear una lista de primitivos int o primitivos en java como los siguientes?

List myList = new ArrayList(); 

Parece que puedo hacer List myList = new ArrayList();

y agrega “int” en esta lista. Pero entonces esto significaría que puedo agregar algo a esta lista.

¿Es mi única opción, crear una matriz de int y convertirla en una lista o crear una lista de objetos Integer?

En Java, el tipo de cualquier variable es un tipo primitivo o un tipo de referencia. Los argumentos de tipo genérico deben ser tipos de referencia. Como las primitivas no extienden el Object , no pueden usarse como argumentos de tipo genérico para un tipo parametrizado.

En su lugar, usa la clase Integer que es un contenedor para int :

 List list = new ArrayList(); 

Si usa Java 7 puede simplificar esta statement utilizando el operador de diamante:

 List list = new ArrayList<>(); 

Con el autoboxing en Java, el tipo primitivo int se convertirá en un Integer cuando sea necesario.

Autoboxing es la conversión automática que hace el comstackdor Java entre los tipos primitivos y sus correspondientes clases de contenedor de objetos.

Entonces el siguiente es válido:

 int myInt = 1; List list = new ArrayList(); list.add(myInt); System.out.println(list.get(0)); //prints 1 

No, no hay ninguna colección que pueda contener tipos primitivos cuando se usa Java Collection Framework.

Sin embargo, hay otras colecciones de Java que admiten tipos primitivos, como: Trove , Colt , Fastutil , Guava.

Un ejemplo de cómo sería una matriz de matrices con enter cuando se utilizó la Biblioteca de Trove es la siguiente:

  TIntArrayList list= new TIntArrayList(); 

El rendimiento de esta lista, en comparación con ArrayList de enteros de Java Collections, es mucho mejor ya que no es necesario el autoboxing / unboxing para la clase de contenedor entero correspondiente.

¿Hay alguna manera de crear una lista de primitivos int o primitivos en java?

No, no puedes. Solo puede crear la Lista de tipos de referencia, como Integer , String o su tipo personalizado.

Parece que puedo hacer List myList = new ArrayList(); y agrega “int” en esta lista.

Cuando agrega int a esta lista, se encasilla automáticamente en el tipo de envoltura Integer . Pero es una mala idea usar listas de tipos sin procesar , o para cualquier tipo genérico para el caso, en el código más nuevo.

Puedo agregar algo en esta lista.

Por supuesto, esa es la desventaja del uso del tipo sin procesar. Puede tener Cat , Dog , Tiger , Dinosaur , todo en un contenedor.

Es mi única opción, crear una matriz de int y convertirla en una lista

En ese caso también, obtendrá un List solamente. No hay forma de que pueda crear List o cualquier primitivo.

No deberías molestarte de todos modos. Incluso en List puede agregar un tipo de int prim. Se encasillará automáticamente, como en el siguiente ejemplo:

 List list = new ArrayList(); list.add(5); 

Esto no es posible. La especificación java prohíbe el uso de primitivas en generics. Sin embargo, puede crear ArrayList y llamar a add(i) si i int debido al boxeo.

Intente usar ArrayIntList desde el marco de Apache. Funciona exactamente como un arraylist, excepto que puede contener primitive int.

Más detalles aquí –

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

Puede usar colecciones primitivas disponibles en Colecciones Eclipse . Eclipse Collections tiene List , Set , Bag y Map para todas las primitivas. Los elementos en las colecciones primitivas se mantienen como primitivos y no se lleva a cabo el boxeo.

Puede inicializar una IntList como esta:

 MutableIntList ints = IntLists.mutable.empty(); 

Puede convertir desde una List a IntList esta manera:

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

Nota: soy colaborador de las colecciones de Eclipse.

Las colecciones usan generics que admiten tipos de referencia o wilcards. Sin embargo, puedes usar un contenedor Integer

 List list = new ArrayList<>(); 

Cuando usa Java para el desarrollo de Android, se recomienda usar SparseIntArray para evitar el autoboxing entre int e Integer .

Puede encontrar más información en SparseIntArray en la documentación de Desarrolladores de Android y una buena explicación para el autoboxing en Android. Ingrese la descripción del enlace aquí.

¿Hay alguna forma de convertir una matriz Integer [] a una matriz int []?

Esta gran omisión de las bibliotecas centrales de Java parece surgir en casi todos los proyectos en los que he trabajado. Y por muy conveniente que sea la biblioteca de Trove, no puedo analizar los requisitos precisos para cumplir con LPGL para una aplicación de Android que vincula de forma estática una biblioteca de LGPL (el preámbulo dice “OK”, el cuerpo no parece decir lo mismo). Y es simplemente incómodo ir y sacar fonts de Apache para obtener estas clases. Tiene que haber una mejor manera.

Java Collection debería ser colecciones de Object solamente.

 List integerList = new ArrayList(); 

Entero es la clase contenedora del tipo de datos primitivo int.

más de las clases de contenedor JAVA aquí !

U puede guardar directamente y obtener int a / from integerList como, integerList.add(intValue); int intValue = integerList.get(i)