Está en la página 1de 25

Arrays Class

&
Collections

Algoritmos y Estructura de
Datos I

Ing. Roger M. Sánchez Chávez


Agenda
▪ Introducción
▪ Java Arrays Class
▪ Java interface Collection
▪ Set
▪ List
▪ Java interface Map
▪ Actividad propuesta
Introducción
Hay veces que los arreglos no son adecuados o suficientes por características del problema que
hay que resolver.

Puede ser que se necesite almacenar elementos, pero que no se sepa cuántos elementos se
van a tener, en este caso, un arreglo con numero fijo de elementos no es adecuado. Para
solucionar estos problemas surgen las típicas agrupaciones de elementos, pilas, colas, tablas
hash, conjuntos, etc.
Java Arrays Class
Java incorpora la clase Arrays para disponer de métodos que trabajen con arrays (arreglos) de
cualquier tipo. Estos métodos implementan algoritmos de búsqueda, ordenación y de
asignación de un valor al array completo. Todos los métodos son static (métodos de clase). No
se pueden crear objetos de la clase Arrays ya que su constructor es privado.
Java Arrays Class
❑ Ordenación de arrays
El método de ordenación, sort(), está sobrecargado, de tal forma que se puede ordenar un
array de cualquier tipo primitivo y, en general, de tipo Object. sort() que implementa el
algoritmo de ordenación quicksort que asegura una eficiencia n log n.
Java Arrays Class
❑ Búsqueda de un valor
La clase Arrays dispone del método static binarySearch() para realizar la búsqueda de un
elemento en un array. El método devuelve la posición del elemento en el array, o bien, si no
está, -p siendo p la posición de inserción del elemento en el array. El método está
sobrecargado para cada tipo de dato primitivo y para arrays de cualquier objeto (Object)
que implemente la interfaz Comparable.
Java Interface Collection
Para estos tipos de agrupaciones,
Java proporciona las llamadas
Collectiones (Colecciones) que
proporcionan varias abstracciones
para conjuntos (Set), listas (List),
colas (Queue), etc.

Todas las colecciones se encuentran


en el paquete java.util.

Java.util.Collection es la raíz de la
jerarquía de las colecciones.
Java Interface Collection
La jerarquía Collection.Collection es una
interfaz no una clase; la diferencia entre clase e
interfaz es que una interfaz es una clase que no
tiene implementados sus métodos.

Existirán especializaciones que permitan


elementos duplicados o no, que permitan
ordenar los elementos o no, etc.

Esta clase contiene la definición de todos los


métodos genéricos que deben implementar las
colecciones.
Java Interface Collection
• Métodos de Operaciones Básicas:

int size(): Número de elementos que contiene.

boolean isEmpty(): Si no contiene ningun elemento.

boolean contains(Object elemento): Si contiene ese elemento.

boolean add(Object elemento): Añadir un elemento.

boolean remove(Object elemento): Borrar un elemento.

Iterator iterator(): Devuelve una instancia de Iterator.


Java Interface Collection
• Métodos de Operaciones Masivas:

boolean containsAll(Collection c): Si contiene todos esos elementos.

boolean addAll(Collection c): Añadir todos esos elementos.

boolean removeAll(Collection c): Borra todos esos elementos.

boolean retainAll(Collection c): Borrar todos los elementos menos esos concretos.

void clear(): Borrar todos los elementos.


Java Interface Collection
• Métodos de Operaciones con Arreglos:

– Object[ ] toArray(): Devuelve un array con todos los elementos.

– Object[ ] toArray(Object a[ ]): Devuelve un array con todos los elementos. El tipo será el
del array enviado.

• Las colecciones no permiten el uso de tipos primitivos; por lo que, si necesitamos trabajar
con ellos habrá que usar los Wrappers de tipos primitivos.
Iterator
• El interfaz Iterator representa un componente que permite iterar sobre los elementos de
una coleción.

• Todas las colecciones ofrecen una implementación de Iterator por medio del método:

public Iterator iterator();

• Sus metodos son:

boolean hasNext(): Si tiene más elementos.

Object next(): Devuelve el primer elemento y se queda apuntando al siguiente.

void remove(): Elimina el primer elemento y se queda apuntando al siguiente.


Set
• El interfaz Set hereda del interfaz Collection. Pero no añade la definición de ningún método
nuevo.

• Representan colecciones que no permiten tener elementos duplicados.

• Para saber si un elemento está duplicado, hace uso del método:

public boolean equals(Object elemento);

• Existen distintas implementaciones de esta interfaz.


Set
• java.util.HashSet (SDK 1.2.X.):

Ofrece el acceso más rápido cuando dicho acceso es aleatorio.


Su orden de iteración es impredecible.

• java.util.LinkedHashSet (SDK 1.4.X.):

Su orden de iteración es el orden de inserción.

• java.util.TreeSet (SDK 1.2.X.):

Su orden de iteración depende de la implementacion que los elementos hagan del interfaz
java.lang.Comparable.

public int compareTo(Object elemento);


List
• El interfaz List hereda del interfaz Collection.

• Representan colecciones con elementos en secuencia. Es decir, con orden.

• Permite tener duplicados.

• Es accesible mediante indice, de manera que se puede:

Acceder a un elemento concreto de una posición.


Insertar un elemento en una posición concreta.
List
•Metodos para Acceso Posicional:
–Object get(int index): Devuelve el elemento de esa posición.

–Object set(int index, Object elemento): Reemplaza el elemento de esa posición con ese
elemento.

–void add(int index, Object elemento): Inserta ese elemento en esa posición.

–Object remove(int index): Elimina el elemento de esa posición.

–boolean addAll(int index, Collection c): Inserta todos esos elementos en esa posición.
List
• Metodos para Busqueda:

int indexOf(Object elemento): Devuelve la posición de la primera ocurrencia de ese


elemento.

int lastIndexOf(Object elemento): Devuelve la posicion de la ultima ocurrencia de ese


elemento.

• Subcolecciones:

List subList(int from, int to): Devuelve una lista con los elementos comprendidos entre ambas
posiciones.

• Existen distintas implementaciones de esta interfaz.


List
• java.util.ArrayList (SDK 1.2.X.):

Ofrece un tiempo de acceso óptimo cuando dicho acceso es aleatorio.

• java.util.LinkedList (SDK 1.2.X.):

Ofrece un tiempo de acceso óptimo cuando dicho acceso es para añadir o eleminar
elementos del comienzo y final de la lista (tipico para pilas).

• java.util.Vector:

Es como el ArrayList pero sincronizando lo que penaliza notablemente el rendimiento.


La sincronización es importante cuando mas de un thread (hilo de ejecución) va a acceder a
la coleción.
Java Interface Map
El interfaz Map no hereda del interfaz
Collection. Representa colecciones con
parejas de elementos: clave y valor.

No permite tener claves duplicadas. Pero si


valores duplicados.

Para calcular la colocación de un elemento se


basa en el uso del método.

public int hashCode();


Java Interface Map
• Metodos para Operaciones Básicas:

Object put(Object key, Object value): Insertar una pareja.

Object get(Object key): Accede al valor de una clave.

Object remove(Object key): Eliminar una pareja.

boolean containsKey(Object key): Comprueba la existencia de una clave.

boolean containsValue(Object value): Comprueba la existencia de un valor.

int size(): Número de parejas.

boolean isEmpty(): Si no contiene ninguna pareja.


Java Interface Map
• Metodos para Operaciones Masivas:

–void putAll(Map t): Añade todas las parejas.

–void clear(): Elimina todas las parejas.

• Métodos para Obtención de Colecciones:

–public Set keySet(): Devuelve las claves en un Set.

–public Collection values(): Devuelve los valores en una Collection.

• Existen distintas implementaciones de esta interfaz.


Java Interface Map
• java.util.HashMap (SDK 1.2.X.):
Ofrece un tiempo de acceso óptimo cuando dicho acceso es aleatorio.
• java.util.Hashtable:
Es la versión sincronizada de HashMap.
• java.util.LinkedHashMap (SDK 1.4.X.):
Su orden de iteración es el de inserción.
• java.util.TreeMap:
Su orden de iteración depende de la implementación que los elementos hagan del interfaz
java.lang.Comparable.

public int compareTo(Object elemento);


Arreglos vs Colecciones
Arreglo Colección
Tamaño estático. Tamaño dinámico.

Su tamaño se conoce mediante el Su tamaño se conoce mediante el


atributo length. método size().

Puede almacenar tanto tipos Solo puede almacenar tipos complejos.


primitivos como tipos complejos.

Solo puede albergar elementos de un Puede albergar elementos de distinto


tipo. tipo.
Actividad propuesta
• Crea una lista que contenga los días de la semana.
• Crea un conjunto al que se le va a llamar jugadores. Inserta en el conjunto los jugadores del
FC Barcelona.
Gracias

También podría gustarte