2. ❏ Introducción
❏ Jerarquía de colecciones.
❏ Traversable
❏ Iterable - Iterator
❏ Colecciones
❏ Tipo de colecciones
Contenido ❏ Secuencias
➢ Listas
➢ Arrays
➢ List Buffeer
➢ Ejemplos de código
➢ Queue
➢ Stacks
❏ Set & Maps
➢ Operaciones Set
➢ Operaciones Map
❏ Bibliografía
3. Introducción
Las colecciones están presentes en la mayor parte de los programas que
escribimos y todos los lenguajes incluyen un marco de trabajo de colecciones.
Scala no es la excepción y la mayoría de las colecciones que ofrece son
inmutables con muchas facilidades para operaciones de iteración. Estas dos
características de las colecciones usadas correctamente nos conducen a escribir
código conciso y de gran desempeño en las plataformas multicore actuales.
4. Introducción - Tipos de colecciones
Las colecciones de Scala se distinguen sistemáticamente entre colecciones
mutables o inmutables. En una colección mutable se puede agregar, cambiar o
remover elementos de una colección . Las colecciones inmutables, al contrario,
nunca cambian, puede haber operaciones que simulen ediciones, agregación , o
eliminación, pero estas operaciones en cada caso retornan una nueva colección y
dejarán sin cambiar la original.
5. Introducción - Importar colecciones
Formas de importar una colección en Scala:
Import scala.collection
Import scala.collection.immutable
Import scala.collection.mutable
6. Introducción - Importar colecciones
Cualquiera de las formas anteriores, si al llamar a una colección solo se coloca
una palabra sin un prefijo como por ejemplo Set esta se referirá a una colección
inmutable, por lo que para llamar a una colección mutable se necesita instanciarla
de esta manera:
mutable.Set
El último paquete en la jerarquía de colecciones es collection.generic, este paquete
contiene bloques de construcción para implementar colecciones.
7. Introducción - Alias en Scala
Por conveniencia y retro compatibilidad algunos tipos importantes tienen alias en
el paquete scala, por lo que se puede usar con sus simples nombres sin
necesidad de importar, por ejemplo el tipo Lista puede accederse
alternativamente
scala.collection.immutable.List
scala.List
List
Otros tipos que tienen alias son Traversable, Iterable, Seq,
IndexedSeq, Iterator, Stream, Vector, StringBuilder y Range
9. Jerarquía de Colecciones
Lo que denotamos es que todas las
colecciones derivan de la super trait
Iterable de las colecciones mutables e
inmutables (Seq), los set y los maps, la
mayoría de las colecciones que se ofrecen
son inmutables pero como derivan de
Iterable, poseen facilidad de iteración,
dependiendo del uso o aplicación
obtendremos un rendimiento en las
plataformas actuales de desarrollo.
10. Traversable
Es el tope de la jerarquía de las colecciones de Scala.
Su única operación abstracta es foreach que permite aplicar una operación por
cada elemento de la colección.
11. Iterable - Iterator
Un iterador tiene muchos de los mismos
métodos que iterable incluídas las de
orden superior pero no pertenecen a la
misma jerarquía, pero se diferencian en
que Iterable puede manejar datos que se
repitan más de una vez y así mismo se
puede usar los métodos Iterable múltiples
ocasiones mientras que Iterator solo una.
12. Colecciones
● Seq: Es un iterable donde el orden de los
elementos está arreglado con posiciones de
los índices empezando por 0. Indexed Seq
Linear Seq
● Set: Son iterables que no contienen
elementos duplicados. Sorted Set, Bit Set
● Map: Es un iterable en el que cada
elemento es un par (clave, valor)
SortedMap
13. Tipos de Colecciones
Básicamente existen dos tipos de colecciones: mutables e inmutables, una
colección mutables es factible ingresar, eliminar y modificar elementos de una
colección mientras que las inmutables no se pueden cambiar los valores por
asignación, existen método o funciones que simulan las operaciones
anteriormente mencionadas pero éstas retornan una nueva colección dejando
intacta la antigua.
14. Secuencias - Listas
Es el tipo más importante a saber dentro de las colecciones, es una estructura de
datos inmutable, Como ventaja podemos indicar que las listas tienen una
estructura recursiva, mientras que los arrays son planos. La inmutabilidad de las
listas permiten desarrollar algoritmos correctos y eficientes porque se va a
necesitar hacer copias de una lista.
Operaciones básicas:
● head: devuelve el primer elemento de la lista.
● tail: devuelve una lista que consta de todos los elementos menos el primero.
● isEmpty: devuelve True si la lista está vacía
17. Secuencias - Arrays
Éstos permiten que se mantenga una secuencia de elementos y se pueda
acceder a una posición arbitraria, tanto como para obtener un elemento con un
índice de base cero, algo que denota es que éste tipo de colección es mutable.
Los array en Scala están representados en la misma forma que los array en Java,
de esa manera permite utilizar los mismo algoritmos desarrollados en Java y que
devuelva un array, ésto quiere decir que posee los mismo métodos.
26. Secuencias - List Buffers
Un List Buffer es un objeto mutable que ayuda a construir listas de manera más
eficiente cuando se necesitan anexarlas, así mismo proporcionan operaciones de
agregación y anteponer operaciones, así mismo al terminar de construir se puede
invocarla mediante toList en el ListBuffer.
Así una ventaja sería que al usar éste tipo de colección es evitar el potencial del
desbordamiento del stack de memoria, porque se puede crear una la lista
anteponiendo el orden deseado
30. Secuencias - ArrayBuffers
Un ArrayBuffer es como un array con la excepción añadir y eliminar elementos de
al inicio y al final de la secuencia, una desventaja sería que aunque posee todas
las operaciones de los arrays, aunque son un poco más lento debido a una capa
de envase (wrapping) en la ejecución.
Una ventaja es que cuando se crea el ArrayBuffer se debe especificar un
parámetro de tipo, pero no especificar su longitud, ésta colección
automáticamente ajustará el espacio asignado según sea necesario.
33. Secuenciales - Queues
Es el tipo de colección de datos FIFO y en Scala ofrecen variantes mutables e
inmutables de cola. Se pueden agregar valores a una cola inmutable con enqueue,
de igual manera se puede agregar múltiples valores en la misma línea, para
removar se usa dequeue, pero al momento de usar éste método en una cola
inmutable, éste devuelve el elemento a la cabeza de la cola y una tupla que el
resto de elementos eliminados.
En la cola mutable se puede usar de forma similar, solo que en vez de usar
enqueue, usamos += y ++= para agregar valores y para descolar dequeue solo
remueve el elemento a la cabeza de ésta.
36. Secuenciales - Stack
De la misma forma que en las Colas, en las pilas existen versiones mutables e
inmutables, posee los métodos principales push y pop.
El comando push permite ingresar valores a la cola, top devuelve el valor tope de
la cola y pop eliminar ese valo
39. Set & Maps
Scala proporciona tanto mutables como inmutables versiones de Set y Maps y su
jerarquía es la siguiente:
40. Set & Maps
Por defecto se escribe “Set” o “Map” y se obtiene un objeto inmutable. Por otro
lado, si se desea que sea mutable se tiene que hacer una importación explícita.
Scala proporciona el acceso mediante el objeto Predef.
45. Map
Para crear un Map, hay que tener en cuenta lo siguiente:
Se debe especificar dos cosas, el primer es la clave del map y el segundo son los
valores, osea Map[String, int], , así mismo la lectura de un map es similar a
la de una matriz.
53. Resumen: Instanciar una colección en Scala
Para instanciar cada tipo de colección puede ser creada por la misma sintaxis,
escribiendo el nombre de la colección seguido de sus elementos:
Traversable(1, 2, 3)
Iterable("x", "y", "z")
Map("x" -> 24, "y" -> 25, "z" -> 26)
Set(Color.red, Color.green, Color.blue)
SortedSet("hello", "world")
Buffer(x, y, z)
IndexedSeq(1.0, 2.0)
LinearSeq(a, b, c)
54. El mismo principio se aplica para implementaciones de colecciones específicas,
como:
List(1, 2, 3)
HashMap("x" -> 24, "y" -> 25, "z" -> 26)
Resumen: Instanciar una colección en Scala
55. Libro:
Programming in Scala
Martin Odersky
Referencias de internet:
http://www.scala-lang.org/api/2.12.0/scala/collection/mutable/Queue.html
https://www.tutorialspoint.com/scala/scala_sets.htm
http://docs.scala-lang.org/overviews/collections/arrays.html
http://docs.scala-lang.org/overviews/collections/maps.html
Referencias bibliográficas