Las diferencias y conexiones entre las interfaces List, Set y Map en Java
La lista es más eficiente cuando se recorre una matriz; por ejemplo, se usa a menudo cuando se muestra toda la información en un bucle.
Los elementos en Set no se pueden repetir. El método add(Object obj) para agregar un objeto existente sobrescribirá el objeto anterior; aunque tanto Set como List implementan la interfaz Collection, sus métodos de implementación son bastante diferentes. La lista se basa básicamente en Array. Pero Set se implementa sobre la base de HashMap. Esta es la diferencia fundamental entre Set y List. El mapa es un mapa de par clave-valor (clave, valor). La clave es el tipo Sting y el valor es Objeto (tipo de objeto). Por lo tanto, cuando conozca un elemento de información, utilice este método para consultar otros elementos. ¡más eficiente! (¡Opinión personal arriba!)
Detalles: Hay tres diferencias principales entre las matrices y otros contenedores: eficiencia, tipo y la capacidad de guardar tipos básicos. En Java, las matrices son un almacenamiento y un método A muy eficiente. de acceder aleatoriamente a una secuencia de referencias de objetos. La matriz es una secuencia lineal simple, por lo que la velocidad de acceso es muy rápida, pero también pierde algunas otras características. Después de crear un objeto de matriz, el tamaño es fijo. , generalmente se crea otra matriz y luego mueve todas las referencias de la matriz anterior a la nueva matriz. Las matrices pueden almacenar tipos básicos, pero los contenedores no.
Las clases de contenedor no manejan objetos por tipos específicos. pero todos los objetos se procesan con el tipo Objeto, por lo que solo podemos crear un contenedor, y cualquier objeto Java se puede colocar en él. La clase contenedora puede usar clases contenedoras (Integer, Double, etc.) para colocar tipos básicos. it. List Set Map se puede ajustar automáticamente la capacidad, las matrices no.
La colección representa un conjunto de objetos, que también se denominan elementos de la colección. Algunas colecciones permiten elementos duplicados, mientras que otras no. Algunas colecciones están ordenadas, mientras que otras no. El JDK no proporciona ninguna implementación directa de esta interfaz, sino implementaciones de subinterfaces más específicas como Set y List.
Map Un objeto que asigna claves a valores. Un mapa no puede contener claves duplicadas; cada clave solo puede asignar como máximo un valor. La interfaz del Mapa proporciona tres vistas de colección, lo que le permite ver el contenido de un mapa en forma de un conjunto de claves, un conjunto de valores o una clave. conjunto de relaciones de mapeo de valores. Algunas implementaciones de mapeo pueden garantizar explícitamente su orden, como la clase TreeMap (ordenada); algunas implementaciones de mapeo no garantizan el orden, como la clase HashMap (desordenada).
Map se puede expandir a una matriz multidimensional como una matriz, simplemente convierta cada valor en un Map.
Colección y Map son los dos tipos básicos en los contenedores de Java. La diferencia radica en cada posición en el contenedor. número de elementos guardados. La colección solo puede guardar un elemento en cada posición, incluidos List y Set. List guarda un grupo de elementos en el orden en que se ingresan y los elementos en Set no se pueden repetir. HashSet es un tipo de Conjunto, puede usar el método add() para agregar elementos a cualquier Colección. Map guarda pares clave-valor. Use put() para agregar elementos a Map, lo que requiere una clave y un valor como parámetros. /p>
Tanto ArrayList como LinkedList implementan la interfaz List. La capa inferior de ArrayList está respaldada por una matriz y LinkedList está respaldada por una lista doblemente vinculada. Por lo tanto, si inserta o elimina elementos con frecuencia en la tabla, LinkedList lo es. más adecuado si consulta ArrayList con frecuencia, es más adecuado.
Set Las implementaciones incluyen TreeSet, HashSet y LinkedHashSet. LinkedHashSet mantiene el orden de inserción de los elementos. en TreeMap y genera un conjunto que siempre está en estado ordenado.
Collectionlt; --Listlt -- Vector
Collectionlt;
Colecciónlt; --Listlt; --LinkedList
Colecciónlt; --HashSet
Colecciónlt;--Setlt;--HashSetlt;--LinkedHashSet p>
Collectionlt;--Setlt;--SortedSetlt;--TreeSet
Vector: basado en Array List en realidad encapsula algunas funciones que Array no tiene para nuestro uso. No puede caer en las limitaciones. de matriz. Es imposible superar a Array en rendimiento. Por lo tanto, siempre que sea posible, deberíamos utilizar más Array. Otro punto muy importante es que Vector está "sincronizado", que también es la única diferencia entre Vector y ArrayList.
ArrayList: Al igual que Vector, es una lista enlazada basada en Array, pero la diferencia es que ArrayList no está sincronizada. Por lo tanto, es superior a Vector en términos de rendimiento, pero cuando se ejecuta en un entorno de subprocesos múltiples, debe administrar la sincronización de los subprocesos usted mismo.
LinkedList: LinkedList es diferente de las dos Listas anteriores. No se basa en Array, por lo que no está limitado por el rendimiento de Array. Cada nodo (Nodo) contiene dos aspectos: 1. Los datos del propio nodo (datos); 2. La información del siguiente nodo (nextNode); Por lo tanto, al agregar y eliminar acciones a una LinkedList, no es necesario mover una gran cantidad de datos como en una lista basada en matrices. Simplemente cambie la información relevante de nextNode y podrá lograrlo. Ésta es la ventaja de LinkedList.
Resumen de la lista:
1. Todas las listas solo pueden contener una tabla compuesta por un único objeto de diferentes tipos, no pares clave-valor.
Por ejemplo: [tom, 1, c];
2. Todas las listas pueden tener los mismos elementos, por ejemplo, Vector puede tener [tom, koo, too, koo];
3. Todas las listas pueden tener elementos nulos, como [tom, null, 1];
4. La lista basada en matrices (Vector, ArrayList) es adecuada para consultas, mientras que LinkedList (lista vinculada) lo es. adecuado para agregar operación de eliminación.
HashSet: Aunque Set y List implementan la interfaz Collection, sus métodos de implementación son bastante diferentes. La lista se basa básicamente en Array. Pero Set se implementa sobre la base de HashMap. Ésta es la diferencia fundamental entre Set y List. El método de almacenamiento de HashSet es utilizar la clave en HashMap como el elemento de almacenamiento correspondiente de Set. Quedará claro de un vistazo si observa la implementación del método add(Object obj) de HashSet.
public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null
}
Esta es también la razón fundamental por la que no puede haber elementos duplicados en Set como en List, porque las claves de HashMap no se pueden duplicar.
LinkedHashSet: una subclase de HashSet, una lista enlazada.
TreeSet: Una subclase de SortedSet La diferencia fundamental con HashSet es que TreeSet está ordenado. Se implementa a través de SortedMap.
Resumen del conjunto:
1. La base de la implementación del conjunto es Map (HashMap);
2. El método add (Object obj) agrega un objeto existente, que sobrescribirá el objeto anterior;
/530536333/blog/1283866146
La interfaz Lista simplemente extiende su implementación específica de uso común. Las clases son ArrayList y LinkedList. Puede poner cualquier cosa en un contenedor Lista y sacarlo cuando sea necesario. ArrayList puede verse por su nombre que se almacena en forma de matriz, por lo que su velocidad de acceso aleatorio es extremadamente rápida, mientras que la implementación interna de LinkedList es una lista vinculada, que es adecuada para operaciones frecuentes de inserción y eliminación en el medio. de la lista enlazada. Puede elegir libremente según sus necesidades en aplicaciones específicas. El Iterator mencionado anteriormente solo puede atravesar el contenedor hacia adelante, mientras que ListIterator hereda la idea de Iterator y proporciona un método para el recorrido bidireccional de la Lista.
La interfaz Set también es una extensión de Collection y, a diferencia de List, los elementos del objeto en Set no se pueden repetir, lo que significa que no se puede colocar lo mismo dos veces en el mismo contenedor Set. Sus implementaciones concretas de uso común incluyen las clases HashSet y TreeSet. HashSet puede localizar rápidamente un elemento, pero el objeto que coloca en HashSet debe implementar el método hashCode (), que utiliza el algoritmo de código hash mencionado anteriormente. TreeSet almacena los elementos colocados en él en orden, lo que requiere que los objetos que coloque en él se puedan ordenar. Esto utiliza las otras dos clases de utilidad Comparable y Comparador proporcionadas por el marco de la colección. Si una clase se puede ordenar, debería implementar la interfaz Comparable.
A veces, varias clases tienen el mismo algoritmo de clasificación, por lo que no es necesario definir repetidamente el mismo algoritmo de clasificación cada vez, siempre que se implemente la interfaz Comparator. También hay dos clases públicas muy útiles en el marco de la colección: colecciones y matrices. Collections proporciona algunos métodos muy útiles para ordenar, copiar, buscar y llenar un contenedor de Collection, mientras que Arrays realiza operaciones similares en una matriz.
Map es un contenedor que asocia objetos clave y objetos de valor, y un objeto de valor puede ser un mapa, etc., formando así un mapeo multinivel. Para objetos clave, como Set, no se permite que los objetos clave en un contenedor de Mapa se repitan. Esto es para mantener la coherencia de los resultados de la búsqueda. Si hay dos objetos clave que son iguales, entonces desea obtener el valor; objeto correspondiente a ese objeto clave Habrá un problema. Quizás lo que obtenga no sea el objeto de valor que pensaba y el resultado será confuso. Por lo tanto, la unicidad de la clave es muy importante y está en línea con la naturaleza de. el conjunto. Por supuesto, durante el uso, el objeto de valor correspondiente a una determinada clave puede cambiar. En este caso, el último objeto de valor modificado corresponderá a la clave. No existe ningún requisito de unicidad para los objetos de valor. Puede asignar cualquier número de claves a un objeto de valor sin ningún problema (pero puede causarle inconvenientes porque no sabe qué objeto de valor corresponde a qué clave obtiene). Hay dos implementaciones de Map de uso común: HashMap y TreeMap. HashMap también utiliza el algoritmo de código hash para encontrar rápidamente una clave. TreeMap almacena las claves en orden, por lo que tiene algunos métodos extendidos, como firstKey(), lastKey(), etc. También puede usar TreeMap para especificar un rango para obtener su clave. submapa. La asociación entre claves y valores es muy simple. Utilice el método pub (clave de objeto, valor de objeto) para asociar una clave con un objeto de valor. Utilice get (clave de objeto) para obtener el objeto de valor correspondiente a este objeto clave.