java - sorteo - primitiva jueves
Crear una lista de primitiva int? (10)
¿Hay alguna manera de crear una lista de primitivos int o primitivos en java como los siguientes?
List<int> myList = new ArrayList<int>();
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?
¿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 fuentes de Apache para obtener estas clases. Tiene que haber una mejor manera.
¿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<Integer>
solamente. No hay forma de que pueda crear List<int>
o cualquier primitivo.
No deberías molestarte de todos modos. Incluso en List<Integer>
puede agregar un tipo de int
prim. Se encasillará automáticamente, como en el siguiente ejemplo:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
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í.
En Java, los argumentos de tipo genérico deben ser objetos. 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<Integer> list = new ArrayList<Integer>();
Si usa Java 7 puede simplificar esta declaración utilizando el operador de diamante:
List<Integer> 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 compilador Java entre los tipos primitivos y sus correspondientes clases de contenedor de objetos.
Entonces el siguiente es válido:
int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);
System.out.println(list.get(0)); //prints 1
Esto no es posible. La especificación java prohíbe el uso de primitivas en genéricos. Sin embargo, puede crear ArrayList<Integer>
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í -
Java Collection debería ser colecciones de Object solamente.
List<int> intList = new ArrayList<int>();
es lo mismo que
List<Integer> integerList = new ArrayList<Integer>();
Entero es la clase contenedora del tipo de datos primitivo int.
más de las clases de contenedor JAVA here !
U puede guardar directamente y obtener int a / from integerList como, integerList.add(intValue);
int intValue = integerList.get(i)
Las colecciones usan genéricos que admiten tipos de referencia o wilcards. Sin embargo, puedes usar un contenedor Integer
List<Integer> list = new ArrayList<>();
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.
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<Integer>
a IntList
esta manera:
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
Nota: soy colaborador de las colecciones de Eclipse.