1
Aprender a programar desde cero / Caso práctico comprobación de diferencias entre ArrayList y LinkedList CU00921C
« en: 25 de Mayo 2017, 19:22 »
Buenos días, ejercicio CU00921C del tutorial de programación Java avanzado.
He tratado de desarrollar este ejercicio creando un arrayList y un LinkedList para que en tiempo de ejecución entreguen los resultados de ambos casos. Pero finalmente no logro eliminar del conteo los vehículos diferentes al objeto coche. No encuentro dónde esta el error.
Adjunto código correspondiente.
a) Implementa el programa usando ArrayList. ¿Cuál es el resultado que obtienes?
Rpta: En ambos casos el resultado final es el mismo utilizando el arrayList o el LinkedList, sólo que el primero gasta mucho mas tiempo de procesamiento.
b) Implementa el programa usando LinkedList ¿Cuál es el resultado que obtienes?
Rpta: En ambos casos el resultado final es el mismo utilizando el arrayList o el LinkedList, sólo que el segundo invierte mucho menos tiempo de procesamiento.
Y la clase vehiculo
He tratado de desarrollar este ejercicio creando un arrayList y un LinkedList para que en tiempo de ejecución entreguen los resultados de ambos casos. Pero finalmente no logro eliminar del conteo los vehículos diferentes al objeto coche. No encuentro dónde esta el error.
Adjunto código correspondiente.
a) Implementa el programa usando ArrayList. ¿Cuál es el resultado que obtienes?
Rpta: En ambos casos el resultado final es el mismo utilizando el arrayList o el LinkedList, sólo que el primero gasta mucho mas tiempo de procesamiento.
b) Implementa el programa usando LinkedList ¿Cuál es el resultado que obtienes?
Rpta: En ambos casos el resultado final es el mismo utilizando el arrayList o el LinkedList, sólo que el segundo invierte mucho menos tiempo de procesamiento.
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
/**
*
* @author itco1724
*/
public class TestVehiculo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<Vehiculo> cp = new ArrayList<Vehiculo>();
List<Vehiculo> sp = new LinkedList<Vehiculo>();
String[] Vehiculos = {"Coche", "Camion", "Furgoneta", "Moto"};
Random r = new Random();
Vehiculo temp = null;
long inicio=0;
long inicio1=0;
long fin = 0;
long fin1 = 0;
int numeroCoches = 0;
int numeroCamiones = 0;
int numeroFurgonetas = 0;
int numeroMotos = 0;
int vehiculosEliminados = 0;
// LLenar las listas arrayList - LinkedList con 5000 tipos de vehiculos
for(int i=0;i<5001;i++) {
cp.add(new Vehiculo(i,Vehiculos[r.nextInt((0)+4)]));
sp.add(new Vehiculo(i,Vehiculos[r.nextInt((0)+4)]));
}
Iterator<Vehiculo> it = cp.iterator();
Iterator<Vehiculo> et = sp.iterator();
while(it.hasNext()){
temp = it.next();
switch (temp.getTipo()){
case "Coche":
numeroCoches ++;
break;
case"Camion":
numeroCamiones ++;
break;
case "Furgoneta":
numeroFurgonetas ++;
break;
case "Moto":
numeroMotos ++;
break;
}
//Imprime el arrayList por completo
//System.out.println(temp);
}
while(et.hasNext()){
temp = et.next();
switch (temp.getTipo()){
case "Coche":
numeroCoches ++;
break;
case"Camion":
numeroCamiones ++;
break;
case "Furgoneta":
numeroFurgonetas ++;
break;
case "Moto":
numeroMotos ++;
break;
}
//System.out.println(temp);
}
//Imprimir el arraList y el LinkedList con los objetos vehiculos contabilizados
System.out.println("Resumen arraylist inicial : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
System.out.println("Resumen LinkedList inicial : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
//elimina todos los vehículos que no son coches de la arraylist y contabiliza el tiempo
inicio = System.nanoTime();
it = cp.iterator();
while (it.hasNext()) {
temp = it.next();
// Eliminación de objetos del arrayList
//if (!temp.getTipo().equals("Coche")) {it.remove(); vehiculosEliminados++;}
if (temp.getTipo().equals("Camion") || temp.getTipo().equals("Furgoneta") || temp.getTipo().equals("Moto") ) {
it.remove();
vehiculosEliminados++;}
}
//elimina todos los vehículos que no son coches del linkedList y contabiliza el tiempo
inicio1 = System.nanoTime();
et = sp.iterator();
while (et.hasNext()) {
temp = et.next();
// Eliminación de objetos del LinkedList
//if (!temp.getTipo().equals("Coche")) {et.remove(); vehiculosEliminados++;}
if (temp.getTipo().equals("Camion") || temp.getTipo().equals("Furgoneta") || temp.getTipo().equals("Moto") ) {
et.remove();
vehiculosEliminados++;}
}
//Añade mismo numero de coches a eliminados al arrayList
for (int i=0; i<vehiculosEliminados; i++) {
cp.add(new Vehiculo (numeroCoches+i+1, "Coche"));}
//Añade mismo numero de coches a eliminados al LinkedList
for (int i=0; i<vehiculosEliminados; i++) {
sp.add(new Vehiculo (numeroCoches+i+1, "Coche"));}
fin = System.nanoTime();
fin1 = System.nanoTime();
//Recorrer el arrayList para calcular las cantidades de vehiculos nuevamente
it = cp.iterator();
while (it.hasNext()) {
Vehiculo tmp = it.next();
if (tmp.getTipo().equals("Coche")) {numeroCoches++;}
else if (tmp.getTipo().equals("Camión")) {numeroCamiones++;}
else if (tmp.getTipo().equals("Furgoneta")) {numeroFurgonetas++;}
else {numeroMotos++;}
}
//Recorrer el LinkedList para calcular las cantidades de vehiculos nuevamente
et = sp.iterator();
while (it.hasNext()) {
Vehiculo tmp = it.next();
if (tmp.getTipo().equals("Coche")) {numeroCoches++;}
else if (tmp.getTipo().equals("Camión")) {numeroCamiones++;}
else if (tmp.getTipo().equals("Furgoneta")) {numeroFurgonetas++;}
else {numeroMotos++;}
}
System.out.println ("Tiempo empleado en eliminación-inserción (en nanosegundos): "+(fin-inicio)+".");
System.out.println("Resumen arrayList final : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
System.out.println ("Tiempo empleado en eliminación-inserción (en nanosegundos): "+(fin1-inicio1)+".");
System.out.println("Resumen LinkedList final : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
}
}
Y la clase vehiculo
Código: [Seleccionar]
public class Vehiculo {
private int ID;
private String tipo;
public Vehiculo(int ID, String tipo) {
this.ID = ID;
this.tipo = tipo;
}
@Override
public String toString() { StringBuilder sb = new StringBuilder();
return " VEHICULOS -->: ID" + ID + " " + "Tipo: "+ tipo;}
//Métodos
public int getID() { return ID; } //Método función para retornar el ID
public String getTipo() {return tipo;} //Método función retornar marca
} //Cierre de la clase