23
Colecciones en Scala Nombre: André Jaramillo Placencia Docente: Ing. Magali Mejía

Colecciones en Scala

Embed Size (px)

Citation preview

Page 1: Colecciones en Scala

Colecciones en Scala

Nombre: André Jaramillo Placencia

Docente: Ing. Magali Mejía

Page 2: Colecciones en Scala

Índice

● Introducción● Jerarquía de colecciones.● Iterable - Iterator● Colecciones● Tipo de colecciones● Secuencias

○ Listas

○ Arrays

○ List Buffeer

○ Ejemplos de código

○ Queue

○ Stacks

Page 3: Colecciones en Scala

Índice

● Set & Maps○ Operaciones Set

○ Operaciones Map

● Bibliografía

Page 4: Colecciones en Scala

Introducción

Tendremos una visión general sobre de cómo las estructuras de datos se relacionan entre sí la jerarquía de colecciones (herencia).

El uso de las colecciones o estructuras se basa en la forma en que deseemos almacenar los datos para su posterior uso, conocer sus ventajas, desventajas, aplicación y requisitos de entrada.

Page 5: Colecciones en Scala

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.

Page 6: Colecciones en Scala

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.

Page 7: Colecciones en Scala

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

Page 8: Colecciones en Scala

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.

Page 9: Colecciones en Scala

Secuencias - ListasListas: Es el tipo más importante a saber dentro de las colecciones, es una estructura de datos inmutable, Como ventaja podemos indica 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ásica:

● 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

Page 10: Colecciones en Scala

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 devuelvan un array, ésto quiere decir que posee los mismo métodos.

Page 11: Colecciones en Scala

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

Page 12: Colecciones en Scala

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.

Page 13: Colecciones en Scala

Ejemplos de Código

● Listas literales

val fruit = List("apples", "oranges", "pears") val nums = List(1, 2, 3, 4) val diag3 = List( List(1, 0, 0), List(0, 1, 0), List(0, 0, 1) ) val empty = List()

Page 14: Colecciones en Scala

Ejemplo de códigos

● Array

val fiveInts = new Array[Int](5)

val fiveToOne = Array(5, 4, 3, 2, 1)fiveInts(0) = fiveToOne( 4)fiveInts

En la primera línea tenemos que crear el array de tipo entero con una longitud de 5, o sencillamente se lo carga con los valores vistos en la segundalínea, los arrays son accesibles desde su índice, en la tercera línea se da el valor del fiveInts con la posición 0 el valor del array fiveToOne con la posición 4, y luego se imprime el valor del array modificado.

Page 15: Colecciones en Scala

Ejemplo de código

● List Buffer

import scala.collection.mutable.ListBufferval buf = new ListBuffer[Int] buf += 1 buf += 2 buf 3 +: buf buf.toList

Se importa la biblioteca mutable.ListBuffer y se instancia la estructura de datos, se agrega valores mediante buf += 1. buf +=2, como mencionamos anteriormente, es factible ingresar valores al principio de la list buffer y se realiza en la penúltima línea anteponiendo el valor al símbolo así 3 +: buf y se invoca la lista con el método toList

Page 16: Colecciones en Scala

Ejemplo de código

● ArrayBuffer

import scala.collection.mutable.ArrayBuffer

val buf = new ArrayBuffer[Int] ()

buf += 12

buf += 15

buf

La primera línea importa la biblioteca mutable ArrayBuffer, luego se instancia sin declarar su longitud, se agregan valores al ListBuffer y al final con el nombre de ésta se instancia la lista con todos sus valores.

Page 17: Colecciones en Scala

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.

Page 18: Colecciones en Scala

Secuenciales - Stacks

De igual manera que en las Colas, en las pilas existen versiones mutables e inmutables, posee los métodos principales push y pop.

import scala.collection.mutable.Stackval stack = new Stack[Int] stack.push(1)stack.push(2)stack.topstack.pop

stack

El comando push permite ingresar valores a la cola, top devuelve el valor tope de la cola y pop eliminar ese valor.

Page 19: Colecciones en Scala

Set & Maps

Scala proporciona tanto mutables como inmutables versiones de Set y Maps y su jerarquía es la siguiente:

Page 20: Colecciones en Scala

Set & Maps

Por defecto se escribe “Set” o “Map” y se obtiene un objeto inmutable, si se desea que sea inmutable se tiene que hacer una importación explícita.

Scala proporciona el acceso mediante el objeto Predef.

object Predef { type Set[T] = scala.collection.immutable.Set[T] type Map[K, V] = scala.collection.immutable.Map[K, V] val Set = scala.collection.immutable.Set val Map = scala.collection.immutable.Map // ... }

En el código anterior se explica el cómo instanciar un Set o un Map mutable o inmutable con las respectivas bibliotecas.

Page 21: Colecciones en Scala

Operaciones - Set

La característica clave de los conjuntos es que se garantiza como máximo un valor por cada objeto

Page 22: Colecciones en Scala

Operaciones - Map

Tenga en cuenta que parra poder crear un map, 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.

Page 23: Colecciones en Scala

Bibliografía

● http://www.artima.com/pins1ed/collections.html

Programming in Scala, First Edition - by Martin Odersky, Lex Spoon, and Bill Venners