Buenas, ejercicio bien resuelto con el código bien estructurado.
En una ejecución he obtenido estos resultados:
Ejecución con ArrayList
Resumen lista inicial: hay 1278 Coches, 1217 Camiones, 1277 Furgonetas y 1228 Motos
Una vez realizada la eliminación-inserción:
Tiempo empleado en eliminación-inserción (en nanosegundos): 5572328
Resumen lista final: hay 5000 Coches, 0 Camiones, 0 Furgonetas y 0 Motos
Ejecución con LinkedList
Resumen lista inicial: hay 1296 Coches, 1248 Camiones, 1206 Furgonetas y 1250 Motos
Una vez realizada la eliminación-inserción:
Tiempo empleado en eliminación-inserción (en nanosegundos): 2270842
Resumen lista final: hay 5000 Coches, 0 Camiones, 0 Furgonetas y 0 Motos
Como se ha comentado, supone más del doble de tiempo la ejecución con ArrayList que con LinkedList.
Según el tipo de operación que con más frecuencia se fuera a realizar (insertar en posiciones finales, o insertar en posiciones intermedias, o eliminaciones en posiciones intermedias, etc.) nos puede resultar más conveniente utilizar una estructura de datos u otra. Esto en pequeños programas puede no tener importancia, pero para programas de tiempo real con manejo de miles de datos puede resultar crucial, de ahí lo interesante de tener todo esto en cuenta.
Salu2