Buenas tardes a todos, paso a dejar mi solución al ejercicio CU00921C del tutorial de programación java avanzado, lo he hecho tratando de cumplir con lo requerido, espero cualquier observación a modo de retroalimentación.
Saludos
Esta es mi clase Vehículo en la cual eh puesto dos métodos que me permiten obtener lo requerido, pero los he generado como estaticos, si se puede de otra manera me gustaria saberlo.
package claseCU00921C;
import java.util.Iterator;
import java.util.List;
import claseCU00919C.Animal;
public class Vehiculo {
private int idVehiculo;
private String tipo;
public String getTipo() {
return tipo;
}
public Vehiculo(int pIdVehiculo, String pTipo) {
this.idVehiculo = pIdVehiculo;
this.tipo = pTipo;
}
public String toString() {
return "El vehiculo es: " + this.idVehiculo + " Detipo: " + this.tipo;
}
public static String ContarTiposArray(List<Vehiculo> pArreglo) {
Iterator<Vehiculo> itArray = pArreglo.iterator();
Vehiculo temp = null;
int coches = 0, camiones = 0, furgonetas = 0, motos = 0;
while (itArray.hasNext()) {
temp = itArray.next();
switch (temp.getTipo()) {
case "Coche":
coches += 1;
break;
case "Camión":
camiones += 1;
break;
case "Furgoneta":
furgonetas += 1;
break;
default:
motos += 1;
break;
}
}
return coches + " Coches, " + camiones + " Camiones, " + furgonetas + " Furgonetas y " + motos + " Motos";
}
public static String EliminaInserta(List<Vehiculo> pArreglo) {
Iterator<Vehiculo> it = pArreglo.iterator();
long tiempo;
int numEliminados = 0;
Vehiculo temp = null;
tiempo = System.nanoTime();
while (it.hasNext()) {
temp = it.next();
if (temp.getTipo() != "Coche") {
it.remove();
numEliminados += 1;
}
}
pArreglo.listIterator();
for (int i = 5000; i < numEliminados + 5000; i++) {
pArreglo.add(new Vehiculo(i + 1, "Coche"));
}
System.out.println("Una vez realizada la eliminación e inserción; ");
return "Tiempo empleado en la eliminación-inserción (en nanosegundor):"
+ String.valueOf(System.nanoTime() - tiempo);
}
}
package claseCU00921C;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class Programa {
public static void main(String arg[]) {
List<Vehiculo> arrayVehiculos = new ArrayList<Vehiculo>();
List<Vehiculo> linkedVehiculos = new LinkedList<Vehiculo>();
String[] tipos = { "Coche", "Camión", "Furgoneta", "Moto" };
Random tipoRandom = new Random();
for (int i = 0; i < 5000; i++) {
// En este ejemplo cada vehiculo es de un tipo aleatorio
arrayVehiculos.add(new Vehiculo(i, tipos[tipoRandom.nextInt(4)]));
linkedVehiculos.add(new Vehiculo(i, tipos[tipoRandom.nextInt(4)]));
}
System.out.println("Usando ArrayList");
System.out.println("Resumen lista inicial: hay " + Vehiculo.ContarTiposArray(arrayVehiculos));
System.out.println(Vehiculo.EliminaInserta(arrayVehiculos));
System.out.println("Resumen lista Final: hay " + Vehiculo.ContarTiposArray(arrayVehiculos));
System.out.println();
System.out.println("Usando LinkedList");
System.out.println("Resumen lista inicial: hay " + Vehiculo.ContarTiposArray(linkedVehiculos));
System.out.println(Vehiculo.EliminaInserta(linkedVehiculos));
System.out.println("Resumen lista inicial: hay " + Vehiculo.ContarTiposArray(linkedVehiculos));
}
}