Un ejemplo es un chat.
En el chat el programa servidor del chat debe guardar los datos de todos los usuarios del chat (al menos, la conexion que tiene con ellos, aunque puede guardar cosas como el alias, color de texto para ese usuario, etc.).
Los usuarios entran y salen continuamente y puede haber desde ninguno hasta 300 o más todos a la vez.
Si el servidor guarda estos datos en un array, cada posicion del array para un usuario, tiene las siguientes pegas (de eficiencia, principalmente)
- Numero de usuarios limitado al tamaño del array. Si no se quiere limitar, cuando entre un usuario nuevo y no quepa en el array, hay que hacer un array mas grande, copiar todos los datos del array antiguo y añadir el nuevo.
- Cuando sale un usuario, debe buscarlo y borrarlo del array. Para borrar un item del array o lo marcas como no valido (con un flag, con un valror de conexion igual a -1 o cualquier otra forma), o mueves el resto del array una posicion hacia el principio.
- Cuando entra un usuario, hay que añadirlo. Si decidiste borrar usuarios marcando las posiciones del array como no validas, debes recorrer el array buscando una posicion vacia (marcada como no valida)
- Cuando un usuario escribe algo, debes transmitirlo a todos los demas. Debes recorrer el array verificando si las posiciones son o no validas antes de enviar el texto.
Todo esto se evita con una lista.
- Añadir un usuario nuevo es inmediato insertandolo al principio de la lista, y no hay limite, salvo el de la memoria.
- Eliminar un usuario hay que buscarlo en la lista (igual que harías en el array), pero lo borras facilmente cambiando un par de punteros de sitio.
- Cuando un usuario escribe algo%2