repetidos - hashmap objetos java
Los objetos duplicados se agregan a la lista (4)
¿Supongo que eres nuevo en Java? Solo crear nuevas instancias en el bucle funcionará.
ArrayList<ModelClass> al = new ArrayList<ModelClass>();
for(int i=0; i<10; i++){
ModelClass obj = new ModelClass();
obj.setName(2+i);
obj.setRoolno(4+i);
al.add(obj);
}
Esta pregunta ya tiene una respuesta aquí:
- Solo el último objeto se agrega a ArrayList 4 respuestas
- Agregue un objeto a una ArrayList y modifíquelo más tarde 3 respuestas
Al agregar objetos a la lista, pude ver que el objeto está reemplazando todos los valores en la lista.
Por favor, compruebe la imagen de abajo y observe el código en bucle para duplicados de objetos en la lista.
public static void main(String args[]) {
ArrayList<Modelclass> al = new ArrayList<Modelclass>();
Modelclass obj = new Modelclass();
for (int i = 0; i < 10; i++) {
obj.setName(2 + i);
obj.setRoolno(4 + i);
System.out.println(obj);
//if (!al.equals(obj)) {
al.add(obj);
System.out.println(obj.getName() + "" + obj.getRoolno());
//}
}
}
Siempre estás agregando lo mismo
Modelclass obj = new Modelclass();
Que creaste fuera del bucle for. Luego, dentro del ciclo, estás modificando los valores.
Como siempre es una referencia al mismo objeto, está modificando todos los elementos en ArrayList.
Pruebe esto en su lugar:
for (int i = 0; i < 10; i++) {
Modelclass obj = new Modelclass(); //This is the key to solve it.
obj.setName(2 + i);
obj.setRoolno(4 + i);
System.out.println(obj);
al.add(obj);
System.out.println(obj.getName() + "" + obj.getRoolno());
}
Su problema es que está haciendo referencia al mismo objeto porque creó el objeto antes del ciclo. Debiera ser
public static void main(String args[]) {
ArrayList<Modelclass> al = new ArrayList<Modelclass>();
for (int i = 0; i < 10; i++) {
Modelclass obj = new Modelclass();
obj.setName(2 + i);
obj.setRoolno(4 + i);
System.out.println(obj);
//if (!al.equals(obj)) {
al.add(obj);
System.out.println(obj.getName() + "" + obj.getRoolno());
//}
}
}
Su variable obj
solo se crea una instancia una vez, pero se agrega a la lista varias veces. Cada vez que actualiza los miembros de obj
, está actualizando la misma pieza de memoria y, por lo tanto, cada referencia de lista muestra los mismos datos (últimos agregados).