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.

 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)

 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)

  • ¿Cómo invocar un método (reflexión) con un parámetro no genérico?
  • ¿Alguien tiene puntos de referencia (código y resultados) que comparan el rendimiento de las aplicaciones de Android escritas en Xamarin C # y Java?
  • Obtención de metadatos de SHOUTcast utilizando IcyStreamMeta
  • ANDROID - Enviar una captura de pantalla de java a android via tcp socket
  • Eliminar los acentos de String
  • Android - Desplazamiento vertical con GridLayout
  • JSON jsonObject.optString () devuelve String "null"
  • Android y C ++: ¿Necesario?
  • ¿Por qué la mayoría de los ejemplos utilizan ArrayList?
  • ¿Cuál es la biblioteca de análisis de feed más utilizada para Android
  • Herencia parcelable: clase abstracta - ¿QUÉ CREADOR?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.