Está en la página 1de 6

COLECCIONES

Una coleccin es un objeto que rene y organiza a otros objetos. Las


colecciones definen las diferentes maneras en las cuales los elementos de la
coleccin pueden ser accedidos y administrados. Las colecciones pueden ser
separadas en dos grandes categoras: Lineales y No lineales.

Orden de la coleccin
La organizacin de los elementos en una coleccin es usualmente determinada
por una de las siguientes criterios:
1. El orden en el cual fueron agregados los objetos
2. Alguna relacin inherente entre los elementos
Tipos de Datos Abstractos TDA (Abtract Data Type ADT)
Una abstraccin esconde o ignora ciertos detalles de un objeto, y solo se
enfoca en las caractersticas que hacen o componen al objeto en si.
La interface es una abstraccin que nos permite controlar una implementacin
de un objeto.
Una coleccin es una abstraccin ya que se definen las operaciones que
deberan declararse en la interfaz para que los usuarios puedan acceder a ella y
usarla.

Los usuarios interactan con la coleccin a travs de la interface y los detalles


de cmo la coleccin es implementada estn ocultos para el usuario

Operaciones para una coleccin de tipo conjunto


add
addAll
removeRandom
remove
union
contains
equals
isEmpty
size
iterator
ToString

Aade un elemento al conjunto


Aade los elementos de un conjunto a otro
Elimina un elemento aleatorio del conjunto
Elimina un elemento concreto del conjunto
Combina los elementos de dos conjuntos para crear un tercero
Determina si un elementos concreto se encuentra dentro del
conjunto
Determina si dos conjuntos contienen los mismos elementos
Determina si el conjunto esta vaco
Determina el numero de elementos del conjunto
Proporciona un iterador para el conjunto
Proporciona una representacin del conjunto en forma de cadena de
caracteres

Coleccin Java API


En la versin JSE de Java existen las definiciones de colecciones e interfaces,
entonces por qu definir algo que ya existe? Debido a que el conjunto de colecciones
definidas en la versin JSE es un subconjunto de las colecciones que podremos
utilizar posteriormente y las clases que define JSE no son implementadas en la
manera que nosotros necesitaremos.

Coleccin Set
Nuestra coleccin se llamara Set la cual no contiene elementos duplicados,
asumimos que no cuenta con un orden establecido entre los elementos y es una
coleccin de tipo no lineal
A continuacin se muestra una vista conceptual de la representacin de una coleccin
de tipo Set

Las colecciones contienen operaciones en comn las cuales solo varan en los
detalles, por lo tanto definiremos una clase la cual define todas las operaciones que
pueden aplicarse a cualquier coleccin sin dar detalles de cmo se deba implementar,
es decir utilizaremos una INTERFAZ.
INTERFACES
Una interface nos permite especificar un conjunto de mtodos abstractos,
especificndose la signatura de cada mtodo, pero no su cuerpo. Esta tarea se le deja
al usuario ya que la manera en que se manipula algn objeto de la coleccin varia un
poco dependiendo del tipo de coleccin que utilicemos.
Las interfaces tambin pueden ser del tipo genrico T. En los mtodos de la
interfaz, el tipo de diversos parmetros y valores de retorno se suelen expresar
utilizando el tipo genrico T. Cuando la interfaz sea implementada, dicha
implementacin se basara en el tipo por el cual se sustituya T.
Nuestra interface SetADT<T> se define a continuacin, junto con todos las
operaciones que se le pueden realizar a nuestra coleccin de tipo conjunto

package jss2;
import java.util.Iterator;
public interface SetADT<T> {
/** Agrega un elemento a la coleccin, ignorando elementos
duplicados */
public void add (T element);
/** Remueve de manera aleatoria un elemento de la coleccin,
el
elemento eliminado lo toma como valor de retorno*/
public T removeRandom ();
/** Elimina y Remueve de la coleccin un elemento
especifico, el elemento eliminado lo toma como valor
retorno*/
public T remove (T element);

en
de

/** Regresa la union de la coleccin con la coleccin que se


enva como parmetro */
public SetADT<T> union (SetADT<T> set);
/** Devuelve true si la coleccin contiene al parmetro */
public boolean contains (T target);
/**Devuelve true si la coleccin y el parmetro especificado
contienen los mismos elementos */
public boolean equals (SetADT<T> set);
/**Devuelve true si la coleccin esta vaca */
public boolean isEmpty();
/**Devuelve el numero
coleccin */
public int size();

de

elementos

que

contiene

nuestra

/**Devuelve un Iterator para los elementos de esta coleccin


*/
public Iterator<T> iterator();
/**Devuelve una representacin de este conjunto en forma de
caracteres*/
public String toString();
}

Iteradores
Un iterador es un objeto que provee la manera para iterar a travs de la coleccin.
La interface Iterator esta definida en la librera de clases de JSE con los dos mtodos
abstractos que son:
hasNext()
Regresa trae si la coleccin tiene mas elementos
next()
Regresa el prximo elemento en la iteracin
Por el hecho de ser una interface significa que deja al usuario la
implementacin de dicha clase como mejor nos convenga, por lo tanto debemos
cuidar los siguientes detalles.
Otra cuestin relativa al uso de los iteradores es qu sucede si se modifica la
coleccin mientras se esta utilizando el iterador. La mayora de las colecciones de la
API Collections de java estn implementadas con lo que se conoce con el nombre de
caracterstica de fallo rpido. Esto simplemente significa que esas colecciones genera,
o deberan generar, una excepcin si se modifica la coleccin mientras se esta
usando el iterador. Sin embargo, la documentacin relativa a estas colecciones es
muy explicita al afirmar que este comportamiento no puede garantizarse.
Una manera de manejar este problema es hacer iteradores que permitan la
modificacin concurrente, reflejndose dichos cambios en la iteracin, as como
tambin la creacin de iteradores que permiten reconocer una instantnea de la
coleccin, sobre la cual las modificaciones concurrentes no tienen ningn impacto.
Implementando una Coleccin con Arrays
Como implementar una Coleccin que es una estructura de datos NO lineal en
un array que es una estructura de datos lineal?
El hecho de que el array almacene los objetos en un orden concreto no es
relevante en este caso porque, en una coleccin de tipo conjunto, no hay ningn
orden definido entre los elementos. Por tanto, nuestra solucin para implementar cada
operacin de la coleccin de tipo conjunto no conceder ninguna relevancia al orden
en el que los objetos estn almacenados en la matriz.

Cmo administrar el hecho de que el tamao de un Array es fijo?


Cuando utilizamos una matriz para implementar una coleccin, tenemos que
tener en cuenta la situacin en la que todas las celdas de la matriz estn ya siendo
utilizadas para almacenar elementos y nosotros deseamos agregar un elemento mas.
A esta problemtica se nos presentan las siguientes soluciones:
Podemos implementar las operaciones que aaden un elemento a la coleccin
de tal manera que genere una excepcin si la estructura de datos esta llena.
Podemos implementar las operaciones add de modo que devuelvan un
identificador del estado que el usuario pueda comprobar para ver si la
operacin add ha tenido xito
Podemos expandir automticamente la capacidad de la estructura de datos
subyacentes cada vez que sea necesario, de modo que nunca podr llegar a
estar llena

También podría gustarte