No se puede decir el campo de tamaño se redujo , como tal lista sin el tamaño han existido durante 50 años desde LISP donde están omnipresentes y son muy comunes en ML y Haskell también, tanto influyente en la Scala.
La razón básica es que la lista es una estructura recursiva. Un List
no vacío es Cons(head: A, tail: List[A])
- excepto que Cons se llama de hecho ::
para permitir una notación de infijo conveniente. Puedes acceder a la cola (la lista sin su elemento principal) y esa es una lista también. Y esto se hace casi todo el tiempo. Por lo tanto, tener el recuento en la lista no significa agregar solo un entero, sino tantos enteros como elementos. Esto es factible, pero ciertamente no es gratis.
Si compara con el LinkedList
de java, LinkedList
tiene una implementación recursiva (basada en Node, que es más o menos como Cons, pero con enlaces en ambas direcciones). Pero LinkedList no es un Node, los posee (y mantiene su cuenta). Por lo tanto, si bien tiene una implementación recursiva, no puede tratarlo recursivamente. Si deseaba la cola de una LinkedList como LinkedList, tendría que eliminar la cabecera y cambiar su lista o copiar todos los elementos de la cola en una nueva LinkedList. Por lo tanto, el List
de scala y el LinkedList
de java son estructuras muy diferentes.
Es 'size()' en Java, una función. – Kapep
Pero la función está respaldada por un campo, lo que lo convierte en O (1). Scala List no tiene dicho campo, por una buena razón, pero eso hace que acceda a la longitud O (n). –
"* python * dude" viene de un * fondo * Java *? * python * no se refiere al idioma, ¿o sí? – huynhjl