ArrayList no se inicializa con tamaño predefinido
Tengo un ArrayList del tipo mi modelo, que conatins 3 artículos, que es el tamaño de ArrayList es 3.
ArrayList<Model> mModels; // mModels.size() = 3
Tengo que copiar este ArrayList en otro ArrayList, así que para eso he creado otro ArrayList del mismo tipo como sigue.
- Cómo cambiar el tema de la aplicación de "Actividad en blanco" a "Flujo maestro / detallado"
- Actividad del SDK de Google Drive no encontrada Excepción
- Cómo quitar caracteres no válidos de una cadena?
- Archivo de serialización en Android
- Android Preferences error, "String no se puede convertir en int"
ArrayList<Model> localModels = new ArrayList<>(mModels.size());
el siguiente paso es copiar los datos de la variable miembro a la variable local, ya que no quiero copiar la referencia de la variable miembro que he utilizado Collections.copy ()
Collections.copy(localModels,mModels);
pero estoy recibiendo ArrayOutOfBoundException diciendo que el tamaño del destino debe ser mayor que el tamaño de la fuente. así que he registrado ambos tamaño variable. entonces para el miembro obtuve el tamaño como 3 y para la variable local registrada el tamaño como 0.
ACTUALIZAR
y he intentado copiar el miembro ArrayList a uno local. pero copia sólo referencia. ¿hay alguna manera de copiar los datos en lugar de referencia?
He intentado estos métodos
//1 for(Model model: mModels){ localModels.add(model); } //2 for(Model model: mModels){ localModels.add((Model)model.clone()); } //3 Collections.copy(localModels, mModels); //4 localModels = (ArrayList<Model>)mModels.clone(); //5 localModels = new ArrayList<>(mModels);
así que mis preguntas son
1- ¿Cómo puedo copiar (el valor no debería reflejar) el valor de una ArrayList a otra?
2- por qué java / android siempre copiying la referencia
3- cómo intializar ArrayList con un tamaño predefinido (ya contestado)
- Cómo saltar valores en índices particulares en el gráfico de líneas utilizando MPAndroid Chart Library?
- ¿Se llama el método onUpgrade?
- JSONObject en JSONObject
- ¿Cómo puedo leer un archivo de texto en Android?
- ¿Cómo continuar un bucle for después de un tiempo determinado sin usar el método `try ... catch`?
- Apache Cordova CordovaActividad no se puede resolver
- Aplicación para Android que toma mucha memoria
- La aplicación comienza a buscar el GPS justo al iniciar la aplicación, no cuando es necesario
ArrayList<Model> localModels = new ArrayList<>(mModels.size());
crea una ArrayList
cuya capacidad inicial es igual a mModels.size()
(3 en su ejemplo), pero contiene 0 elementos.
Debe agregar elementos a ArrayList
para que tenga un número positivo de elementos.
Si desea que su localModels
ArrayList
contenga los mismos elementos que mModels
, puede inicializarlo con:
ArrayList<Model> localModels = new ArrayList<>(mModels);
Esto le dará una copia superficial de la ArrayList
original sin embargo.
Puede copiar el ArrayList directamente usando su constructor:
ArrayList<Model> localModels = new ArrayList<>(mModels);
Entonces no hay necesidad de utilizar Collections.copy.
finalmente encontré la respuesta:
Tengo que copiar cada uno de los campos en los modelos por separado para segundo ArrayList
me gusta
ArrayList<Model> localModels = new ArrayList<>(mModels.size()); for(Model model: mModels){ Models tempModel = new Model(); tempModel.setId(model.getId()); tempModel.setName(model.getName()); .... .... localModels.add(tempModel); } return localModels();
esta es la manera de copiar contenidos dentro de una ArrayList a otra ArrayList. cualquier otro método publicado en cuestión copiará solamente referencia
Las listas de matrices tienen tamaño dinámico, por lo que no es necesario inicializarlo con un tamaño predefinido. Sólo puede utilizar ArrayList.addall () para agregar el contenido de un objeto List a otro.
Vea los documentos aquí – http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#addAll(java.util.Collection)
- ¿Cuándo se llama al método onRestart en Android?
- React-native maps no carga para android (mapa en blanco)