6
« en: 06 de Noviembre 2017, 17:17 »
Hola a todos. Os paso mis códigos del ejercicio CU00921C del tutorial pdf de programación Java avanzada.
Código con linkedList= Vehiculo, ListadoVehiculos, Principal
Código con ArrayList=Vehiculo, ListadoVehiculos2, Principal2
Gracias.
Con respecto a los apartados:
a) Con linkedList 18.000.000 nanosegundos.
b) Con arrayList: 6.000.000 nanosegundos.
c) Las diversas pruebas me dan lo mismo, es decir que con ArrayList el tiempo invertido ha sido 1/3 del invertido en LinkedList, o sea, menor y al contrario de lo indicado en el temario. No sé a que se deben las diferencias. Espero no haber hecho algún error en el código. Pero además me salen tiempos mayores en el LinkedList comparándolo también con el código de Erik_Escriche.
Un saludo.
public class Vehiculo {
private int idVehiculo;
private String tipo;
public Vehiculo(){
idVehiculo=0;
tipo="";
}
public Vehiculo(int idVehiculo,String tipo){
this.idVehiculo=idVehiculo;
this.tipo=tipo;
}
public int getIdVehiculo(){
return idVehiculo;
}
public String getTipo(){
return tipo;
}
public void setIdVehiculo(int idVehiculo){
this.idVehiculo=idVehiculo;
}
public void setTipo(String tipo){
this.tipo=tipo;
}
@Override
public String toString(){
return "Vehiculo ID: "+idVehiculo+". Tipo: "+tipo+"\n";
}
}
package practicas.avanzadas.t921C.ejercicio2;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;
/**
*
* @author pepote21
*/
public class ListadoVehiculos {
List<Vehiculo> listaArray;
public ListadoVehiculos(){
listaArray=new LinkedList<Vehiculo>();
}
public void addVehiculo(Vehiculo vehiculo){
listaArray.add(vehiculo);
}
public List<Vehiculo> getLista(){
return listaArray;
}
@Override
public String toString(){
return listaArray.toString();
}
public Iterator<Vehiculo> iterator(){
return new MiIteratorListadoVehiculos();
}
protected class MiIteratorListadoVehiculos implements Iterator<Vehiculo>{//clase interna
public int posicion = 0;
public boolean sepuedeeliminar = false; // Campos
@Override
public boolean hasNext() {
return posicion < listaArray.size();
} // Método
@Override
public Vehiculo next() { // Método
Vehiculo res = listaArray.get(posicion); // Creamos un objeto Persona igual al que recorremos
posicion ++;
sepuedeeliminar = true;
return res;
}
@Override
public void remove() {
if (sepuedeeliminar) {
listaArray.remove(posicion-1);
posicion--;
sepuedeeliminar = false; }
} // Cierre del método remove
} // Cierre de la clase interna
}
package practicas.avanzadas.t921C.ejercicio2;
import java.util.Iterator;
import java.util.Random;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;
/**
* Ejercicio CU00921C aprenderaprogramar.com
* Interfaz list, clase linkeList
* Recorremos linkedList vehículos y eliminamos algunos
* Diferencias entre linkedList y arrayList
* @author pepote21
* @version 20171106
*/
public class Principal {
public static void introVehiculos(ListadoVehiculos lista){//Introducimos 5000 vehículos en la lista
Random rnd=new Random();
String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};
for(int i=0;i<5000;i++){
lista.getLista().add(new Vehiculo(i,tipoVehiculo[rnd.nextInt(4)]));//Atributo tipo establecido de forma aleatoria
}
}
public static void recorrerListaMostrarCantidadVehiculos(ListadoVehiculos lista){//Recorremos lista y mostramos resumen de vehículos de cada tipo
Vehiculo tmp;
int coches=0;
int camiones=0;
int furgonetas=0;
int motos=0;
Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
while(it.hasNext()){
tmp=it.next();
switch(tmp.getTipo()){//Contamos los elementos de cada tipo
case "Coche":
coches++;
break;
case "Camion":
camiones++;
break;
case "Furgoneta":
furgonetas++;
break;
case "Moto":
motos++;
break;
}
}
System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
furgonetas+" furgonetas y "+motos+" motos.");
}
public static void recorrerListaModificarCantidadVehiculos(ListadoVehiculos lista){
Vehiculo tmp;
String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};
int coches=0;
int camiones=0;
int furgonetas=0;
int motos=0;
int vehiculosEliminados=0;
long antes;
long resultado;
antes=System.nanoTime();
Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
while(it.hasNext()){
tmp=it.next();
if(!tmp.getTipo().equals("Coche")){
it.remove();
vehiculosEliminados++;
}
}
coches=5000-vehiculosEliminados;
System.out.println("Se han eliminado de la lista "+vehiculosEliminados+" vehiculos quedando "+coches+" coches");
for(int i=0;i<vehiculosEliminados;i++){
lista.getLista().add(new Vehiculo(coches+i+1,tipoVehiculo[0]));
coches++;
}
resultado=System.nanoTime()-antes;
System.out.println("Se han invertido "+resultado+" nanosegundos en eliminar y añadir vehiculos");
System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
furgonetas+" furgonetas y "+motos+" motos.");
}
public static void main(String[]args){
ListadoVehiculos lista=new ListadoVehiculos();
introVehiculos(lista);
recorrerListaMostrarCantidadVehiculos(lista);
recorrerListaModificarCantidadVehiculos(lista);
}
}
package practicas.avanzadas.t921C.ejercicio2;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;
/**
*
* @author pepote21
*/
public class ListadoVehiculos2 {
List<Vehiculo> listaArray;
public ListadoVehiculos2(){
listaArray=new ArrayList<Vehiculo>();
}
public void addVehiculo(Vehiculo vehiculo){
listaArray.add(vehiculo);
}
public List<Vehiculo> getLista(){
return listaArray;
}
@Override
public String toString(){
return listaArray.toString();
}
public Iterator<Vehiculo> iterator(){
return new MiIteratorListadoVehiculos();
}
protected class MiIteratorListadoVehiculos implements Iterator<Vehiculo>{//clase interna
public int posicion = 0;
public boolean sepuedeeliminar = false; // Campos
@Override
public boolean hasNext() {
return posicion < listaArray.size();
} // Método
@Override
public Vehiculo next() { // Método
Vehiculo res = listaArray.get(posicion); // Creamos un objeto Persona igual al que recorremos
posicion ++;
sepuedeeliminar = true;
return res;
}
@Override
public void remove() {
if (sepuedeeliminar) {
listaArray.remove(posicion-1);
posicion--;
sepuedeeliminar = false; }
} // Cierre del método remove
} // Cierre de la clase interna
}
package practicas.avanzadas.t921C.ejercicio2;
import java.util.Iterator;
import java.util.Random;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;
/**
*
* @author pepote21
*/
public class Principal2 {
public static void introVehiculos(ListadoVehiculos2 lista){//Introducimos 5000 vehículos en la lista
Random rnd=new Random();
String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};
for(int i=0;i<5000;i++){
lista.getLista().add(new Vehiculo(i,tipoVehiculo[rnd.nextInt(4)]));//Atributo tipo establecido de forma aleatoria
}
}
public static void recorrerListaMostrarCantidadVehiculos(ListadoVehiculos2 lista){//Recorremos lista y mostramos resumen de vehículos de cada tipo
Vehiculo tmp;
int coches=0;
int camiones=0;
int furgonetas=0;
int motos=0;
Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
while(it.hasNext()){
tmp=it.next();
switch(tmp.getTipo()){//Contamos los elementos de cada tipo
case "Coche":
coches++;
break;
case "Camion":
camiones++;
break;
case "Furgoneta":
furgonetas++;
break;
case "Moto":
motos++;
break;
}
}
System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
furgonetas+" furgonetas y "+motos+" motos.");
}
public static void recorrerListaModificarCantidadVehiculos(ListadoVehiculos2 lista){
Vehiculo tmp;
String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};
int coches=0;
int camiones=0;
int furgonetas=0;
int motos=0;
int vehiculosEliminados=0;
long antes;
long resultado;
antes=System.nanoTime();
Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
while(it.hasNext()){
tmp=it.next();
if(!tmp.getTipo().equals("Coche")){
it.remove();
vehiculosEliminados++;
}
}
coches=5000-vehiculosEliminados;
System.out.println("Se han eliminado de la lista "+vehiculosEliminados+" vehiculos quedando "+coches+" coches");
for(int i=0;i<vehiculosEliminados;i++){
lista.getLista().add(new Vehiculo(coches+i+1,tipoVehiculo[0]));
coches++;
}
resultado=System.nanoTime()-antes;
System.out.println("Se han invertido "+resultado+" nanosegundos en eliminar y añadir vehiculos");
System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
furgonetas+" furgonetas y "+motos+" motos.");
}
public static void main(String[]args){
ListadoVehiculos2 lista=new ListadoVehiculos2();
introVehiculos(lista);
recorrerListaMostrarCantidadVehiculos(lista);
recorrerListaModificarCantidadVehiculos(lista);
}
}