utilizan que principales listas las framework example español ejemplos describa collection colecciones clases java data-structures

java - que - ¿Cuál es la diferencia entre listas, listas de arreglos, mapas, hashaps, colecciones, etc.?



java collections framework español (7)

He estado usando HashMaps desde que comencé a programar de nuevo en Java sin entender realmente estas colecciones.

Honestamente, no estoy realmente seguro de si utilizar HashMaps en todo momento sería lo mejor para mí o para el código de producción. Hasta ahora no me importaba, siempre y cuando pudiera obtener los datos que necesito de la forma en que los llamé en PHP (sí, admito cualquier cosa negativa en la que estés pensando ahora), donde $this_is_array[''this_is_a_string_index''] proporciona tanta conveniencia para recordar una serie de variables.

Así que ahora, he estado trabajando con Java durante más de 3 meses y encontré las interfaces que especifiqué anteriormente y me pregunté por qué hay tantas cosas (por no mencionar, vectores, abstractList {oh bueno, la lista continúa ... .})?

Me refiero a cómo son diferentes entre sí?

Y, lo que es más importante, ¿cuál es la mejor interfaz para usar en mi caso?


Como ya sabéis, son contenedores de objetos. Leer sus respectivas APIs te ayudará a entender sus diferencias.

Ya que otros han descrito cuáles son sus diferencias con respecto a su uso, les señalaré este link que describe la complejidad de varias estructuras de datos.

Esta lista es un lenguaje de programación agnóstico y, como siempre, las implementaciones en el mundo real variarán.

Es útil para comprender la complejidad de varias operaciones para cada una de estas estructuras, ya que en el mundo real, será importante si está buscando constantemente un objeto en su lista de 1.000.000 elementos vinculados que no esté ordenado. El rendimiento no será óptimo.


Diferencia entre Set, List y Map en Java: Set, List y Map son tres interfaces importantes del marco de trabajo de la colección Java y Diferencia entre Set, List y Map en Java es una de las preguntas más frecuentes sobre la entrevista de la Colección Java. En algún momento esta pregunta se hace cuando se usa Lista, Conjunto y Mapa en Java. Claramente, el entrevistador está buscando saber si está familiarizado con los fundamentos del marco de recopilación de Java o no. Para decidir cuándo usar Lista, Conjunto o Mapa, necesita saber cuáles son estas interfaces y qué funcionalidad proporcionan. La lista en Java proporciona una colección ordenada e indexada que puede contener duplicados. Set proporciona una colección no ordenada de objetos únicos, es decir, Set no permite duplicados, mientras que Map proporciona una estructura de datos basada en el par de valores clave y el hashing. Las tres listas, conjuntos y mapas son interfaces en Java y hay muchas implementaciones concretas disponibles en Collection API. ArrayList y LinkedList son las dos implementaciones de listas usadas más populares, mientras que LinkedHashSet, TreeSet y HashSet se usan con frecuencia para implementar Set. En este artículo de Java veremos la diferencia entre Mapa, Conjunto y Lista en Java y aprenderemos cuándo usar Lista, Conjunto o Mapa.

Set vs List vs Map en Java

Como dije, Set, List y Map son interfaces, que definen un contrato central, por ejemplo, un contrato Set dice que no puede contener duplicados. Basándonos en nuestro conocimiento de Lista, Conjunto y Mapa, comparémoslos en diferentes métricas.

Objetos duplicados La principal diferencia entre la interfaz de Lista y Conjunto en Java es que la Lista permite duplicados, mientras que el Conjunto no permite duplicados. Toda la implementación de Set cumple con este contrato. El mapa contiene dos objetos por entrada, por ejemplo, clave y valor, y puede contener valores duplicados, pero las claves son siempre únicas. Consulte aquí para ver más diferencias entre la estructura de datos de Lista y Conjunto en Java.

Orden Otra diferencia clave entre la Lista y el Conjunto es que la Lista es una colección ordenada, el contrato de la Lista mantiene el orden o elemento de inserción. Set es una colección desordenada, no obtiene ninguna garantía sobre qué elemento del pedido se almacenará. Aunque parte de la implementación de Set, por ejemplo, LinkedHashSet, mantiene el orden. También SortedSet y SortedMap, por ejemplo, TreeSet y TreeMap mantienen un orden de clasificación, impuesto mediante el uso de Comparator o Comparable.

La lista de elementos nulos permite elementos nulos y puede tener muchos objetos nulos en una lista, ya que también permite duplicados. Establecer solo permite un elemento nulo ya que no se permite duplicado mientras que en Map puede tener valores nulos y, como máximo, una clave nula. Cabe destacar que Hashtable no permite valores o claves nulas, pero HashMap permite valores nulos y claves nulas. Esta es también la principal diferencia entre estas dos aplicaciones populares de la interfaz de Map, también conocida como HashMap vs Hashtable.

Implementación popular

Las implementaciones más populares de la interfaz de List en Java son ArrayList, LinkedList y Vector class. ArrayList tiene un propósito más general y proporciona acceso aleatorio con índice, mientras que LinkedList es más adecuado para agregar y eliminar elementos de la Lista con frecuencia. El vector es contraparte sincronizada de ArrayList. Por otro lado, las implementaciones más populares de Set interface son HashSet, LinkedHashSet y TreeSet. El primero es un conjunto de propósito general respaldado por HashMap, vea cómo HashSet funciona internamente en Java para obtener más detalles. Tampoco proporciona ninguna garantía de pedido, pero LinkedHashSet proporciona pedidos junto con la singularidad ofrecida por la interfaz Set. La tercera implementación TreeSet es también una implementación de la interfaz SortedSet, por lo tanto, mantiene los elementos en un orden ordenado especificado por el método compare () o compareTo (). Ahora la última, la implementación más popular de la interfaz de Map son HashMap, LinkedHashMap, Hashtable y TreeMap. El primero es la implementación del Mapa de propósito general no sincronizado, mientras que Hashtable es su contraparte sincronizada, ambos no proporcionan ninguna garantía de pedido que provenga de LinkedHashMap. Al igual que TreeSet, TreeMap también es una estructura de datos ordenados y mantiene las claves ordenadas.


En resumen (y solo mirando interfaces):

Lista : una lista de valores, algo así como una "matriz de tamaño variable"

Set - un contenedor que no permite duplicados

Mapa - una colección de pares clave / valor


Esa es una pregunta que en última instancia tiene una respuesta muy compleja: hay clases universitarias completas dedicadas a las estructuras de datos. La respuesta corta es que todos tienen ventajas y desventajas en el uso de la memoria y la velocidad de varias operaciones.

Lo que sería realmente saludable es un tiempo con un buen libro sobre estructuras de datos. Casi puedo garantizar que su código mejorará significativamente si obtiene una buena comprensión de las estructuras de datos.

Dicho esto, puedo darle un consejo rápido y temporal de mi experiencia con Java. Para las cosas internas más simples, ArrayList es generalmente preferido. Para pasar colecciones de datos, generalmente se utilizan matrices simples. HashMap solo se usa realmente en los casos en que hay alguna razón lógica para tener claves especiales correspondientes a los valores. No he visto a nadie usarlas como una estructura de datos general para todo. Otras estructuras son más complicadas y tienden a usarse en casos especiales.


La API es bastante clara acerca de las diferencias y / o relaciones entre ellos:

Colección

La interfaz raíz en la jerarquía de la colección. Una colección representa un grupo de objetos, conocidos como sus elementos. Algunas colecciones permiten elementos duplicados y otras no. Algunos están ordenados y otros desordenados.

http://download.oracle.com/javase/6/docs/api/java/util/Collection.html

Lista

Una colección ordenada (también conocida como una secuencia). El usuario de esta interfaz tiene un control preciso sobre dónde se inserta cada elemento en la lista. El usuario puede acceder a los elementos por su índice de entero (posición en la lista) y buscar elementos en la lista.

http://download.oracle.com/javase/6/docs/api/java/util/List.html

Conjunto

Una colección que no contiene elementos duplicados. Más formalmente, los conjuntos no contienen un par de elementos e1 y e2 tales que e1.equals (e2), y como máximo un elemento nulo. Como lo indica su nombre, esta interfaz modela la abstracción del conjunto matemático.

http://download.oracle.com/javase/6/docs/api/java/util/Set.html

Mapa

Un objeto que mapea claves a valores. Un mapa no puede contener claves duplicadas; cada tecla puede asignarse a un máximo de un valor.

http://download.oracle.com/javase/6/docs/api/java/util/Map.html

¿Hay algo en particular que encuentre confuso acerca de lo anterior? Si es así, edite su pregunta original. Gracias.


Un breve resumen de las colecciones comunes de java:

''Mapa'': Un ''Mapa'' es un contenedor que permite almacenar el par clave => valor. Esto permite búsquedas rápidas utilizando la clave para obtener su valor asociado. Hay dos implementaciones de esto en el paquete java.util, ''HashMap'' y ''TreeMap''. El primero se implementa como un hastable , mientras que el segundo se implementa como un árbol de búsqueda binaria equilibrada (por lo tanto, también tiene la propiedad de tener las claves ordenadas).

''Establecer'': un ''Conjunto'' es un contenedor que contiene solo elementos únicos. Si se inserta el mismo valor varias veces, el "Conjunto" solo tendrá una instancia de este. También proporciona operaciones rápidas para buscar, eliminar, agregar, combinar y calcular la intersección de dos conjuntos. Al igual que ''Map'', tiene dos implementaciones, ''HashSet'' y ''TreeSet''.

''Lista'': la interfaz ''Lista'' se implementa mediante las clases ''Vector'', ''ArrayList'' y ''LinkedList''. Una ''Lista'' es básicamente una colección de elementos que preservan su orden relativo. Puede agregar / eliminar elementos y acceder a elementos individuales en cualquier posición. A diferencia de un ''Mapa'', los elementos de ''Lista'' están indexados por un int que es su posición es la ''Lista'' (el primer elemento está en la posición 0 y el último en ''List.size ()'' - 1). ''Vector'' y ''ArrayList'' se implementan usando una matriz, mientras que ''LinkedList'', como su nombre lo indica, usa una lista enlazada . Una cosa a tener en cuenta es que, a diferencia de las matrices asociativas de php (que se parecen más a un Map ), una matriz en Java y muchos otros lenguajes representan un bloque de memoria contiguo. Los elementos de una matriz están básicamente dispuestos lado a lado en "ranuras" adyacentes, por así decirlo. Esto proporciona tiempos de búsqueda y escritura muy rápidos, mucho más rápidos que los arreglos asociativos que se implementan utilizando estructuras de datos más complejas. Pero no pueden ser indexados por otra cosa que no sean las posiciones numéricas dentro de la matriz, a diferencia de las matrices asociativas.

Para obtener una buena idea de para qué sirve cada colección y sus características de rendimiento, recomendaría obtener una buena idea acerca de las estructuras de datos como matrices, listas vinculadas, árboles de búsqueda binarios, tablas hash, así como pilas y colas. Realmente no hay sustituto para aprender esto si quiere ser un programador eficaz en cualquier idioma.

También puede leer el rastro de Colecciones de Java para comenzar.


Un mapa vs una lista.

En un mapa, tienes pares clave / valor. Para acceder a un valor necesitas conocer la clave. Existe una relación que existe entre la clave y el valor que persiste y no es arbitrario. Están relacionados de alguna manera. Ejemplo: el ADN de una persona es único (la clave) y el nombre de una persona (el valor) o el SSN de una persona (la clave) y el nombre de una persona (el valor) existe una relación sólida.

En una Lista, todo lo que tiene son valores (un nombre de persona), y para acceder a él debe conocer su posición en la lista (índice) para acceder a él. Pero no hay una relación permanente entre la posición del valor en la lista y su índice, es arbitrario.