Colecciones en Java



















Nota:
Las colecciones de java son utiles porque pueden contener cualquier tipo de objeto y son flexibles.
La desventajas es que a veces o en casos particulares no son mas eficientes que los arrays.
No hay seguridad de tipos, ni ninguna referencia.




Lo primero que vamos hacer, es entender los diagramas anteriores. Entonces cuando tengamos:
Herencia (Especialización/Generalización):

Indica que una subclase hereda los métodos y atributos especificados por una Super Clase, por ende la Subclase además de poseer sus propios métodos y atributos, poseerá las características y atributos visibles de la Super Clase (public y protected), ejemplo:





Agregación:
Para modelar objetos complejos, n bastan los tipos de datos básicos que proveen los lenguajes: enteros, reales y secuencias de caracteres. Cuando se requiere componer objetos que son instancias de clases definidas por el desarrollador de la aplicación, tenemos dos posibilidades:

 


Por Valor:
Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. Este tipo de relación es comunmente llamada Composición (el Objeto base se contruye a partir del objeto incluido, es decir, es "parte/todo").

Por Referencia:
Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye. Este tipo de relación es comunmente llamada Agregación (el objeto base utiliza al incluido para su funcionamiento).


 
Un Ejemplo es el siguiente:

 

 
En donde se destaca que:


--Un Almacen posee Clientes y Cuentas (los rombos van en el objeto que posee las referencias).

--Cuando se destruye el Objeto Almacen también son destruidos los objetos Cuenta asociados, en cambio no son afectados los objetos Cliente asociados.

--La composición (por Valor) se destaca por un rombo relleno.

--La agregación (por Referencia) se destaca por un rombo transparente.



La flecha en este tipo de relación indica la navegabilidad del objeto refereniado. Cuando no existe este tipo de particularidad la flecha se elimina.



Asociación:
La relación entre clases conocida como Asociación, permite asociar objetos que colaboran entre si. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto no depende del otro.
A la hora de hacer codigo se lo interpreta que una clase, tiene una referencia a la otra. El sentido de la fecha indica que la clase tiene acceso a la otra en ese sentido.

  Ejemplo:
 
Un cliente puede tener asociadas muchas Ordenes de Compra, en cambio una orden de compra solo puede tener asociado un cliente.


Dependencia o Instanciación (uso):
Representa un tipo de relación muy particular, en la que una clase es instanciada (su instanciación es dependiente de otro objeto/clase). Se denota por una flecha punteada.

 
El uso más particular de este tipo de relación es para denotar la dependencia que tiene una clase de otra, como por ejemplo una aplicación grafica que instancia una ventana (la creación del Objeto Ventana esta condicionado a la instanciación proveniente desde el objeto Aplicacion):

 

 
Cabe destacar que el objeto creado (en este caso la Ventana gráfica) no se almacena dentro del objeto que lo crea (en este caso la Aplicación).





Casos Particulares:


Clase Abstracta:

Una clase abstracta se denota con el nombre de la clase y de los métodos con letra "itálica". Esto indica que la clase definida no puede ser instanciada pues posee métodos abstractos (aún no han sido definidos, es decir, sin implementación). La única forma de utilizarla es definiendo subclases, que implementan los métodos abstractos definidos.

 SE NOTA O NO LA LETRA ITALICA??? BUENO ESO ES UNA CLASE ABSTRACTA!!


Clase parametrizada



Una clase parametrizada se denota con un subcuadro en el extremo superior de la clase, en donde se especifican los parámetros que deben ser pasados a la clase para que esta pueda ser instanciada. El ejemplo más típico es el caso de un Diccionario en donde una llave o palabra tiene asociado un significado, pero en este caso las llaves y elementos pueden ser genéricos. La genericidad puede venir dada de un Template (como en el caso de C++) o bien de alguna estructura predefinida (especialización a través de clases).



En el ejemplo no se especificaron los atributos del Diccionario, pues ellos dependerán exclusivamente de la implementación que se le quiera dar.

Ejemplo:

Supongamos que tenemos tenemos un el caso del Diccionario implementado mediante un árbol binario, en donde cada nodo posee:
 
 

 ---key: Variable por la cual se realiza la búsqueda, puede ser generica.---item: Contenido a almacenar en el diccionario asociado a "key", cuyo tipo también puede ser genérico.


  Para este caso particular hemos definido un Diccionario para almacenar String y Personas, las cuales pueden funcionar como llaves o como item, solo se mostrarán las relaciones para la implementación del Diccionario:
 

Dado esto ya van a poder interpretar los diagramas, o diagramas de uml.

Ahora lleguemos a unas conclusiones:


Colecction como se ve en todas los diagramas no es una clase concreta, sino que es una interface(un contenedor). que este caso es la que encapsula diferentes tipos de colecciones. Esta interface contiene colecciones que pueden ser manejadas independientemente de los del tipo de su representacion.
Esta coleccion de interfaces son la base del "java collection framework"
La plataforma de java ya incluye este paquete.

Vemos que Set es un tipo especial de coleccion, un SortedSet es un tipo especial de Set y asi sucesivamente. Tambien notemos que la jerarquia consiste en 2 tipos de arboles distintios. Un map es otro contenedor. Aunque en algunos de estosdiagramas, al parecer no uml puede confundir, el hecho de que se usa


 q se lo hace denotar que puede devolver una coleccion. no tiene nada que ver con los fundamentos de los diagramas uml, que anteriormente se han descripto.

Algunos ejemplos de colecciones son:

---Tu circulo de amigos del Google +
---Las cartas de un juego de baraja española
---La lista de empleados del área de sistemas





Estas son algunas funciones que se pueden realizar utilizando colecciones.
 
 

--Agregar objetos a una colección
--Quitar objetos de la colección
--Encontrar un objeto o un grupo de objetos en una colección
--Recuperar un objeto de una colección (sin quitarlo de la colección)
--Iterar a través de una colección, viendo cada elemento, uno después de otro. 

 
 
Clases e interfaces clave
 
 
Las interfaces del framework de colecciones declaran operaciones que pueden ser usadas genéricamente en varios tipos de colecciones. En el examen de certificación se necesitara saber en base a un requerimiento qué colección se debe usar. Por eso es importante conocer las principales clases e interfaces de este framework. Las interfaces mas importantes para el examen son:





No todas las colecciones del Collection Framework implementan la interfaz Collection. Ninguna de las clases e interfaces relacionadas con Map derivan de Collection, aunque pueden ser vistas como colecciones.


Nota. Los elementos subrayados no implementan ni derivan de la interfaz Collection

En la siguiente imagen se muestra la herencia de clases para las colecciones.





interface List


Se encarga de definir métodos para trabajar con colacciones ordenadas y con elementos repetidos. Algunos de los
métodos de la interface List son los siguientes:add(Object o): añade un objeto al final de la lista.
add(int indice, Object o)
: añade un objeto a la lista en la posición indicada.
get(int indice)
: devuelve el objeto de la lista de la posición indicada.
remove(int indice)
: elimina el objeto de la lista pasado por parámetro.
clear()
: elimina todos los elementos de la lista.
indexOf(Object o)
: devuelve la posición de la primera vez que un elemento coincida con el objeto pasado por parámetro. Si el elemento no se encuentra devuelve -1.
lastIndexOf(Object o)
:devuelve la posición de la última vez que un elemento coincida con el objeto pasado por parámetro. Si el elemento no se encuentra devuelve -1.
size()
: devuelve el número de elementos de la lista.
contains(Object o)
: devuelve verdadero si en la lista aparece el objeto pasado por parámetro, para lo cual utiliza intrínsecamente el método equals().


Existen implementaciones de la interface List, como son las clases ArrayList y LinkedList. Hay otras dos que no voy a comentar: Vector(h) y Stack(h).

ArrayList se basa en índices, siendo cero la posición inicial e infinito su posición final, o lo que es lo mismo, contiene tantos objetos como necesitemos, almacenando los elementos en un array de objetos. Esta clase tiene varios constructores, siendo la más importante el ArrayList(), que construye un ArrayList con capacidad cero por defecto pero con infinitos objectos a insertar. Si le queremos dar un tamaño empleamos el constructor ArrayList(int numElementos). ArrayList implementa la interfaz List y extiende de la clase abstracta AbstractList.

LinkedList almacena los elementos en una lista vinculada y permiten un acceso a ella de manera secuencial, pero su uso no es tan eficiente como los arrays.


  
INTERFACES SET<E> y SORTEDSET<E>


Sirve para acceder a una colección sin elementos repetidos (hay que saber cuándo dos objetos son considerados iguales; para ello se usan equals() y hashcode(). Puede estar o no ordenada, y no declara ningún método adicional a los de Collection. Algunos de los métodos de la interface Set son los siguientes:

add(Object o)
: añade el objeto pasado por parámetro al Set siempre que éste no exista ya, y devuelve un booleano.
clear()
: Elimina a todos los elementos del Set.
contains(Object o)
: devuelve true si el Set contiene el objeto pasado por parámetro. Para ello, se compara de forma interna con el método equals (o.equals(x) o con el método hashCode().
isEmpty()
: devuelve true si el Set está vacío.
iterator()
: devuelve un iterador
remove(Object o)
: elimina el objeto pasado por parámetro si existe y devuelve un booleano.
size()
: devuelve un entero que es el número de elementos del Set.
La interface SortedSet extiende de la interface Set y añade una serie de métodos, entre los que hay que destacar:
---comparator()
: obtiene el objeto pasado al constructor para establecer el orden; si se emplea el orden natural definido por la interface Comparable, devuelve null;
first() / ----last(): devuelve el primer o el último elemento del conjunto.Existen dos implementaciones de conjuntos, como son la clase HashSet y la clase TreeSet. HashSet<Elemento>Implementa la inteface Set y está basada en una hash table. Hace distinción de identidad, esto es, que sólo pueden existir elementos diferentes (nada de duplicados). No se respeta el orden en el que se insertan los elementos y el tamaño del conjunto se adapta dinámicamente a lo que se necesite. HashSet implementa la interfaz Set y extiende de la clase abstracta AbstractSet.

TreeSet<Elemento>Implementa SortedSet y se basa en un TreeMap.




Un Map es una estructura de datos agrupados en parejas clave/valor; pueden ser considerados como una tabla de dos columnas. La clave debe ser única y se emplea para acceder al valor.
Map no deriva de Collection, pero sí se pueden ver los Maps como colecciones de claves, de valores o de claves/valores. Algunos de los
métodos de la interface Map son los siguientes:

clear()
: elimina todos los mapeos del Map.


containsKey(Object clave)
: devuelve true si el Map contiene un mapeo igual que el objeto pasado por parámetro: boolean existe = productos.containsKey(producto);

containsValue(Object valor)
: devuelve true si el Map mapea a uno o más claves del objeto valor pasado por parámetro.

get(Object clave)
: devuelve el objeto valor de la clave pasada por parámetro; o null si el Map no encuentra ningún mapeo con esta clave.

isEmpty()
: devuelve true si el Map está vacío.

put(Clave clave, Valor valor)
: asigna el valor pasado con la clave especificada a otro objeto valor.

remove(Object clave)
: elimina el mapeo que tenga la clave pasada por parámetro si existe, devolviendo el valor de dicho mapeo.

size()
: devuelve un entero con el número de mapeos del Map.
La interface SortedMap añade métodos similares a los de SortedSet.

Existen tres implementaciones como son las clases HashMap, HashTable(h) y TreeMap.


HashMap<Clave,Valor>
esta clase mapea claves con valores, pero no permite claves duplicadas porque se solaparía el valor. Tanto la clave como el valor pueden ser cualquier tipo de objeto, y ambos pueden tener el valor null. Esta clase no garantiza el orden de los elementos ni que no puedan cambiar de orden. HashMap implementa la interfaz Map y extiende de la clase abstracta AbstractMap.
Esta clase posee internamente (de la clase AbstractMap) los métodos equals, hashCode y toString.HashTable<Clave,Valor>
Es una clase que implementa Map y que almacena pares del tipo clave/valor en una tabla de dispersión. Al emplearla se proporciona un objeto que sirve como clave y otro como valor (vinculando el valor a la clave).Su insercion y búsqueda es rápida. Un ejemplo sería un listín de teléfonos, en el que dado un nombre se proporciona un teléfono.
TreeMap<Clave,Valor>Esta clase implementa SortedMap y se basa en una árbol binario.




Ventajas y Desventas de cada coleccion

listas
:
Una lista ordenada, o secuencia. Normalmente permiten duplicados y tienen acceso aleatorio (es decir, puedes obtener elementos alojados en cualquier índice como si de un array se tratase).

Sin embargo tenemos en general 2 tipos de implementaciones de lista. ArrayList y LinkedList.
Conviene usar ArrayList cuando quieras tener accesos de forma rapida a posiciones determinadas. Tambien una ventaja es tomar el metodo System.arracopy, cuando tienes que mover varios elementos al mismo tiempo.
Ejemplo

Copias de Arrays
La copia de los elementos de una Array, se realiza tan frecuentemente que existe un método para ello en la clase System.


El método


---System.arraycopy(afu,ifu,ade,ide,inu)
hace la copia. En los argumentos, afu es el Array con los datos de origen, ade el Array a donde se copiarán los datos, ifu el índice inicial para empezar a copiar elementos en el array original, ide el índice inicial donde empiezan a copiarse los elementos en el destino, e inu el número de elementos que se han copiar.

Para copiar todos los elementos de un Array a otro, por ejemplo los elementos de a al array b, la llamada al método sería:

System.arraycopy(a,0,b,0,a.length);


El array destino tiene que haberse creado con un tamaño suficiente para almacenar todos los elementos que se quieren copiar.

       a1=array1
       a2=array2

       //Copiamos el array uno en el dos
       System.arraycopy(a1,0,a2,0,a1.length);
      


System.arrayCopy(aOrigen,inicioArrayOrigen,aDestino,
 inicioArrayDestino,numeroElementosACopiar);

Sets:
Colecciones que no admiten dos elementos iguales. Es decir, colecciones que no admiten que un nuevo elemento B pueda añadirse a una colección que tenga un elemento A cuando A.equals(B).


Maps:
Colecciones que asocian un valor a una clave. Parecido a la estructura de ?array asociativo? que se encuentra en otros lenguajes. Un Map no puede tener dos claves iguales.

Colas:
Colecciones que permiten crear colas LIFO o FIFO. No permiten acceso aleatorio, solo pueden tomarse objetos de su principio, final o ambos, dependiendo de la implementación.




Listas
La colección más básica de Java. También, es la más usada por los programadores que no han investigado el framework de colecciones a fondo por hacernos pensar que se trata de una especie de array hipervitaminado ya que hace su trabajo y es fácil de entender.


Sin embargo, por grande que sea la tentación de usar una lista (como un ArrayList) para todo, ¡has de resistir!
Sabiendo los requisitos de tu aplicación, seguramente encontrarás otra colección que haga el trabajo de una lista mejor. Procura asegurarte de que cuando vas a usar una lista es porque realmente te hace falta, no porque no conoces el resto. La diferencia de rendimiento puede ser enorme. Y cuando digo enorme, me refiero a superior a un 600% en según que operaciones.

¿Qué beneficios tienen las listas?

--Acceso aleatorio.

--Están ordenadas (Podemos usar Colections.sort() para ordenar los elementos siguiendo el criterio que queramos).


--Podemos añadir / eliminar elementos sin ninguna restricción.


--Tienen un iterador especial ListIterator que permite modificar la lista en cualquier dirección.


--Siguen la notación de los arrays, por lo que son fáciles de comprender.
¿Qué problemas tienen las listas?

--Bajo rendimiento en operaciones especialziadas respecto a otras colecciones.
A continuación voy a enumerar todas las listas de Java con sus características,
además, daré una pequeña explicación de cuando deberíais usar esa lista.

Tipos de Lista

ArrayList: Muy rápida accediendo a elementos, relativamente rápida agregando elementos si su capacidad inicial y de crecimiento están bien configuradas. Es la lista que deberías usar casi siempre.
LinkedList
: Una lista que también es una cola (hablaré de esto más tarde). Más rápida que ArrayList añadiendo elementos en su principio y eliminando elementos en general. Utilízala en lugar de ArrayList si realizas más operaciones de inserción (en posición 0) o de eliminación que de lectura. La diferencia de rendimiento es enorme.

Vector
: Terreno peligroso. Vector es una colección deprecated (obsoleta)así que usadla únicamente si necesitáis un ArrayList concurrente. El rendimiento de Vector es superior al de Collections.syncronizedList(new ArrayList()).

CopyOnWriteArrayList
: Colección concurrente que es muy poco eficiente en operaciones de escritura, pero muy rápida en operaciones de lectura. Usala sobre Vector (o synced ArrayList) cuando el número de lecturas concurrentes sea mucho mayor al número de escrituras.
Sets


Los sets, o conjuntos, son colecciones que por norma general no admiten elementos iguales en su interior. Como mencionaba antes, dos elementos A y B son iguales si A.equals(B).
Podemos añadir y eliminar elementos de un set, así como saber si determinado elemento está en un set, pero no tenemos acceso aleatorio, por lo que hay que tener muy claro cuando queremos usarlos.
Una colección normal, en apariencia, nos da todo lo anterior -excepto el hecho de eliminar duplicados-, así que, ¿por qué usar un Set y no una Lista?, el motivo es simple: eficiencia.

Supongamos este código:
List b = new ArrayList();
if (!b.contains(1))

b.add(1);


La funcionalidad es la misma que la de set.add, pero el rendimiento es muchísimo peor, hasta el punto de que podemos tener problemas muy serios cuando añadamos muchos elementos y no queremos eso, ¿verdad?.

¿Qué beneficios tienen los sets?

--No permiten elementos duplicados.


--Implementación muy eficiente de .add para asegurarnos de que no hay duplicados.
¿Qué desventajas tienen?


--No tienen acceso aleatorio.


--Solo algunos tipos de set pueden ordenarse y lo hacen de forma poco eficiente.
¿Cuando deberíamos usar un set sobre una lista?, y ¿qué tipo de set?, veámoslo?


Tipos de Set



HashSet
: La implementación más equilibrada de la interfaz Set. Es rápida y no permite duplicados, pero no tiene ningún tipo de ordenación. Utilízala si necesitas un control de duplicados pero no ningún tipo de ordenación o acceso aleatorio.

LinkedHashSet
: Un HashSet que incluye ordenación de elementos por orden de entrada, una velocidad de iteración mucho mayor y un rendimiento mucho peor a la hora de añadir elementos. Utilizala si necesitas un Set ordenado por orden de inserción o si vas a usar un Set que vaya a realizar solamente operaciones de iteración.

TreeSet
: Un set que incluye una implementación de un árbol rojo-negro. Este Set puede ser ordenado, pero su rendimiento es mucho peor en cualquier operación (menos iteración) respecto aun HashSet. Utilizalo solo si necesitas un Set con un criterio de ordenación específico y ten cuidado con las inserciones.

EnumSet
: La mejor implementación de Set para tipos enumerados (Enum). Utilizala si quieres crear un Set de Enums.

CopyOnWriteArraySet
: Set concurrente que tiene un gran rendimiento de lectura, pero pésimo de escritura, eliminado y contains. Úsalo solo en Sets concurrentes que apenas tengan estas operaciones.

ConcurrentSkipListSet
: Set concurrente y ordenable. Utilizalo solo cuando requieras un Set ordenable (como TreeSet) en entornos de concurrencia. En Sets de tamaños muy grandes su rendimiento empeora notablemente.
Maps


Los maps son colecciones que asocian un valor con una clave. Tanto la clave como el valor pueden ser cualquier tipo de datos de Java: Objetos, primitivos, otras colecciones, etc.
Las implementaciones son muy parecidas a los Sets debido a que, internamente, utilizan un Set (la implementación varía según el tipo de Map) para garantizar que no hay elementos duplicados en las claves.

¿Que ventajas tienen los sets?

--Asociación clave -> valor.

--Gracias a que utilizan internamente un Set, garantizan que no habrá dos claves iguales.

--Es fácil reconocer cuando necesitamos usar un Map.
¿Qué desventajas tienen los sets?

--Rendimiento no muy elevado comparado con otras colecciones.

Tipos de Map



HashMap
: La implementación más genérica de Map. Un array clave->valor que no garantiza el orden de las claves (de la misma forma que un HashSet). Si necesitas un Map no-concurrente que no requiera ordenación de claves, este es el tuyo. Si os fijais en el código de HashSet, veréis que curiosamente utiliza un HashMap internamente.

LinkedHashMap
: Implementación de map que garantiza orden de claves por su tiempo de inserción; es decir, las claves que primero se creen serán las primeras. También puede configurarse para que la orden de claves sea por tiempo de acceso (las claves que sean accedidas precederán a las que no son usadas). Itera más rápido que un HashMap, pero inserta y elimina mucho peor. Utilizalo cuando necesites un HashMap ordenado por orden de inserción de clave.

TreeMap
: Un Map que permite que sus claves puedan ser ordenadas, de la misma forma que TreeSet. Usalo en lugar de un HashMap solo si necesitas esta ordenación, ya que su rendimiento es mucho peor que el de HashMap en casi todas las operaciones (excepto iteración).

EnumMap
: Un Map de alto rendimiento cuyas claves son Enumeraciones (Enum). Muy similar a EnumSet. Usadlo si vais a usar Enums como claves.

WeakHashMap
: Un Map que solo guarda referencias blandas de sus claves y valores. Las referencias blandas hacen que cualquier clave o valor sea eligible por el recolector de basura si no hay ninguna otra referencia al mismo desde fuera del WeakHashMap. Usa este Map si quieres usar esta característica, ya que el resto de operaciones tienen un rendimiento pésimo. Comúnmente usado para crear registros que vayan borrando propiedades a medida que el sistema no las vaya necesitando y vaya borrando sus referencias.

HashTable
: Map deprecated y concurrente. Básicamente, es un HashMap concurrente que no debes usar nunca. En su lugar, utiliza ConcurrentHashMap.

ConcurrentHashMap
: Un Map concurrente que no permite valores nulos. Sustitución básica de HashTable. Usala si necesitas un HashMap concurrente.
Colas


Las colas son estructuras que ofrecen un gran rendimiento al obtener elementos de su principio o de su final, representando colas LIFO / FIFO, aunque también veremos colas ordenadas en función de otros criterios.
Deberás usar una cola cuando vayas a recuperar siempre el primer o último elemento de una serie. Se usan para implementar las mencionadas colas LIFO / FIFO, así como colas de prioridades (como puede ser un sistema de tareas o de procesos).
Cabe destacar que hay dos tipos de colas, QueuesDeques. Las primeras solo proporcionan métodos para acceder al último elemento de la cola, mientras que las Deques permiten acceder a cualquiera de los dos extremos.


¿Qué ventajas tienen las colas?

--Ofrecen un gran rendimiento al recuperar el primer o último objeto de la cola.


--Permiten crear estructuras LIFO / FIFO o colas de prioridades con muy buen rendimiento.
¿Qué desventajas tienen las colas?

--La iteración por las colas suele ser muy lenta.
--El acceso aleatorio, de la misma manera, es muy lento.


Tipos de colas

ArrayDeque: Una implementación de Deque de rendimiento excepcional. Implementa tanto cola LIFO como FIFO al ser una Deque y es la Cola que deberías usar si quieres implementar una de estas dos estructuras.
LinkedBlockingDeque
: Una Deque concurrente que has de usar cuando quieras usar un ArrayDeque en entornos multihilo.

LinkedList
: LinkedList, anteriormente mencionada en la sección de listas, también es una Deque, sin embargo, su rendimiento es muy inferior al de ArrayDeque. No deberías usar LinkedList cuando quieras usar una cola.

PriorityQueue
: Una cola que se ordena mediante un Comparator, permitiendo crear una Cola donde el primer elemento no dependerá de su tiempo de inserción, sino de cualquier otro factor (tamaño, prioridad, etc). Deberemos usarlo cuando necesitemos este comparator, ya que ArrayDeque no lo permite.


PriorityBlockingQueue
: La versión concurrente de PriorityQueue.


Sabores de las colecciones

 
 
Las colecciones vienen en 4 'sabores':
 
---List ---> Listas de Objetos.
---Sets ---> Objetos únicos.
---Maps ---> Objetos con un único Id.
---Queues ---> Objetos acomodados según la forma en como serán procesados.
 
Aunque hay 4 sub-sabores más.
 
---Sorted ---> El acomodo de la colección se da según ciertas reglas (basado en las propiedades de los objetos).

---Unsorted

---Ordered ---> El orden de los elementos es independiente de los valores (orden establecido cuando se inserta un elemento, de acuerdo a la ultima vez que se acceso a ese elemento o en la posición en la que fue agregado).

---Unordered
 
Una colección puede ser ordered sin ser sorted. Pero una colección no puede ser sorted sin ser ordered, ya que el sorted es una forma especifica de ordered.







Complementario


¿Sabias que podias ordenar array sin necesidad de hacerlo a mano?

[ltr]int myArray[] = new int[] {5, 4, 3, 2, 1};[/ltr]
[ltr]java.util.Arrays.sort(myArray);[/ltr]
[ltr]//myArray now holds 1, 2, 3, 4, 5[/ltr]


Ventajas y Desventajas de usar un array

Ventajas
Muy eficiente, rápido de acceder y agregar.
Con seguridad de tipos, sólo se puede añadir elementos que coinciden con el tipo declarado de la matriz

Desventajas
Tamaño fijo, algo de sobrecarga en el copiado / cambio de tamaño
No se puede decir cuántos elementos hay, solo lo grande que fue declarado.
Funciones limitadas, necesitan funcionalidad más general.




 


Colecciones en Java
4 Puntos Score: 2/10
Visitas: 4167 Favoritos: 12
Ver los usuarios que votaron...
6 Comentarios Colecciones en Java
muy interesante, va a ser ?
buenisimo aunq seria bueno q lo pongas en un pdf
Cita tedygun: Mostrar
me lo hize en excel las ventajas y desvejentas de cada colecion , capaz q lo suba.
@RisuK90 tu saves algunos libros de Node.js  es quiero hacer interactuar con google hangouts como https://www.verbling.com/community  
Excelente material    
Gracias hay que empezar un poco con el autodidactismo  
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!