¿Hay alguna manera de crear una lista de int primitivos o cualquier primitivo en java como sigue?
List<int> myList = new ArrayList<int>();
Parece que puedo hacer List myList = new ArrayList();
y agregue "int" en esta lista. Pero entonces esto significaría que puedo agregar cualquier cosa a esta lista.
¿Mi única opción es crear una matriz de int y convertirla en una lista o crear una lista de objetos Integer?
java
list
generics
collections
Susie
fuente
fuente
Respuestas:
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. Dado que las primitivas no se extienden
Object
, no se pueden utilizar como argumentos de tipo genérico para un tipo parametrizado.En su lugar, use la
Integer
clase que es un contenedor paraint
:List<Integer> list = new ArrayList<Integer>();
Si usa Java 7, puede simplificar esta declaración usando el operador de diamante:
List<Integer> list = new ArrayList<>();
Con el autoboxing en Java, el tipo primitivo
int
se convertirá en anInteger
cuando sea necesario.Entonces lo siguiente es válido:
int myInt = 1; List<Integer> list = new ArrayList<Integer>(); list.add(myInt); System.out.println(list.get(0)); //prints 1
fuente
No, no hay ninguna colección que pueda contener tipos primitivos cuando se utiliza 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 lista de matrices con ints cuando se usara la biblioteca Trove es el siguiente:
TIntArrayList list= new TIntArrayList();
El rendimiento de esta lista, en comparación con el ArrayList of Integers de Java Collections es mucho mejor, ya que no se necesita el autoboxing / unboxing a la correspondiente Integer Wrapper Class.
fuente
No, no puedes. Sólo se puede crear una lista de los tipos de referencia, al igual que
Integer
,String
o el tipo personalizado.Cuando agrega
int
a esta lista, se coloca automáticamente en unInteger
cuadro de tipo contenedor. Pero es una mala idea usar primas tipos de listas, o para cualquier tipo genérico para el caso, en el código más reciente.Por supuesto, esa es la desventaja de utilizar el tipo sin formato. Puede tener gato , perro , tigre , dinosaurio , todo en un contenedor.
En ese caso también, obtendrá un
List<Integer>
único. No hay forma de que puedas crearList<int>
ni primitivas.De todos modos, no debería molestarse. Incluso en
List<Integer>
puede agregarint
tipos primitivos. Se incluirá automáticamente en una caja, como en el siguiente ejemplo:List<Integer> list = new ArrayList<Integer>(); list.add(5);
fuente
Intente usar ArrayIntList del marco de apache. Funciona exactamente como una lista de matrices, excepto que puede contener int primitiva.
Más detalles aquí -
https://commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/ArrayIntList.html
fuente
Esto no es posible. La especificación de Java prohíbe el uso de primitivas en genéricos. Sin embargo, puedes crear
ArrayList<Integer>
y llamaradd(i)
sii
es un int gracias al boxeo.fuente
Puede utilizar colecciones primitivas disponibles en Eclipse Collections . Eclipse Collections tiene
List
,Set
,Bag
yMap
para todas las primitivas. Los elementos de las colecciones primitivas se mantienen como primitivos y no se produce ningún boxeo.Puede inicializar una IntList como esta:
Puede convertir de
List<Integer>
aIntList
así:List<Integer> integers = new ArrayList<>(); MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
Nota: Soy colaborador de Eclipse Collections.
fuente
Las colecciones utilizan genéricos que admiten tipos de referencia o wilcards. Sin embargo, puede utilizar una
Integer
envolturaList<Integer> list = new ArrayList<>();
fuente
Cuando usa Java para el desarrollo de Android, se recomienda usarlo
SparseIntArray
para evitar el autoencuadre entreint
yInteger
.Puede encontrar más información
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ífuente
SparseIntArray
frecuencia es una mejor opción, pero hay que tener en cuenta sus ventajas y desventajas. "La implementación no está destinada a ser apropiada para estructuras de datos que pueden contener una gran cantidad de elementos. Por lo general, es más lenta que un HashMap tradicional ..."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 Trove, no puedo analizar los requisitos precisos para cumplir con LPGL para una aplicación de Android que vincula estáticamente una biblioteca LGPL (el preámbulo dice que está bien, el cuerpo no parece decir lo mismo). Y es simplemente un inconveniente tener que extraer y eliminar fuentes de Apache para obtener estas clases. Tiene que haber una mejor manera.
fuente
La colección de Java debe ser solo colecciones de objetos.
List<Integer> integerList = new ArrayList<Integer>();
Integer es una clase contenedora del tipo de datos primitivo int.
¡más de las clases contenedoras de JAVA aquí !
U puede guardar directamente y obtener int hacia / desde integerList como,
integerList.add(intValue);
int intValue = integerList.get(i)
fuente