Red de conocimiento informático - Aprendizaje de programación - problema de recopilación de Java

problema de recopilación de Java

La diferencia entre las clases contenedoras de Java Collection, List, ArrayList, Vector y map, HashTable y HashMap

Collection es la interfaz base de las interfaces List y Set

Lista agregada "ordenada" a la colección

Establecer agregada "única" a la colección

ArrayList es una clase que implementa Lista... por lo que está ordenada

. Los elementos almacenados en él tienen un cierto orden de disposición

Y ArrayList usa una matriz para almacenar elementos

Otra lista, LinkedList, usa Es una lista enlazada.

La principal diferencia entre las interfaces Collection y Map es que Collection almacena un conjunto de objetos, mientras que Map almacena pares clave/valor.

En el objeto Mapa, cada palabra clave tiene como máximo un valor asociado.

Mapa: no puede contener dos claves idénticas y una clave puede estar vinculada como máximo a un valor. Null se puede utilizar como clave y solo existe una clave; puede haber una o más claves cuyo valor correspondiente sea nulo. Cuando el método get() devuelve un valor nulo, puede significar que la clave no existe en el Mapa, o también puede significar que el valor correspondiente a la clave es nulo. Por lo tanto, en Map, no puede usar el método get() para determinar si existe una determinada clave en Map, pero debe usar el método contieneKey().

Las clases que heredan Map son: HashMap, HashTable

HashMap: la clase de implementación de Map, que es asíncrona por defecto y se puede lograr a través de Map Collections.synchronizedMap(Map m) Sincronización de subprocesos

HashTable: una subclase de Diccionario, de hecho está sincronizada por subprocesos. No permita palabras clave o valores nulos

Utilice TreeMap cuando el orden de los elementos sea importante y utilice HashMap cuando no sea necesario almacenar los elementos en un orden específico. No se recomienda el uso de Hashtable ya que HashMap proporciona funciones similares y es mucho más rápido. HashMap también se puede convertir a síncrono cuando necesite usarlo en un entorno de subprocesos múltiples.

Por qué utilizar clases de colección

Cuando no conoce de antemano la cantidad de datos que se almacenarán o necesita un método más flexible que el mecanismo de acceso a subíndices de matriz, puede Necesito usar clases de colección.

Comprensión de las clases de colección

Las clases de colección se almacenan en el paquete java.util.

La clase colección almacena referencias a objetos, no a los objetos mismos. Para facilitar la expresión, llamamos a los objetos de la colección referencias a los objetos de la colección.

Existen tres tipos principales de colecciones: conjunto, lista y mapa.

(1) Conjunto

El conjunto es el tipo de colección más simple. Sus objetos no se clasifican de una manera específica, sino que simplemente agregan objetos al conjunto, como Pon algo en tu bolsillo. .

El acceso y operaciones sobre los miembros del conjunto se realizan a través de referencias a los objetos del conjunto, por lo que no puede haber objetos duplicados en el conjunto.

Los conjuntos también tienen muchas variantes, que pueden implementar funciones como ordenar, como TreeSet. La operación de agregar objetos al conjunto se convertirá en insertarlos en una secuencia ordenada de objetos de acuerdo con ciertas reglas de comparación. Implementa la interfaz SortedSet, que agrega un método de comparación de objetos. Al iterar sobre los objetos del conjunto, podemos obtener una colección de objetos en orden ascendente.

(2) Lista

La principal característica de una lista es que sus objetos se almacenan de forma lineal, sin ningún orden específico, y sólo un principio y un final por supuesto. , es diferente de un conjunto que no tiene ningún orden.

Las listas se representan en estructuras de datos como: matrices y vectores, listas enlazadas, pilas y colas.

La clase de colección que implementa listas se usa a menudo en nuestro trabajo diario y se presentará en detalle en las notas siguientes.

(3) Mapeo

El mapeo es obviamente diferente de los conjuntos o listas. Cada elemento del mapeo es un par. Cada objeto almacenado en el mapeo tiene un objeto clave relacionado. La clave determina la ubicación de almacenamiento del objeto en el mapeo. Se debe proporcionar la clave correspondiente al recuperar el objeto, como si se buscara una palabra en un diccionario. Las palabras clave deben ser únicas.

La palabra clave en sí no determina la ubicación de almacenamiento del objeto. Debe ser procesada por una tecnología de hash para generar un valor entero llamado código hash. El código de columna se usa a menudo como un desplazamiento relativo. el inicio del área de memoria asignada al mapa, determinando así dónde se almacena el par clave/objeto. Idealmente, el hash debería producir una distribución uniforme de valores dentro de un rango determinado, y cada clave debería obtener un código hash diferente.

Introducción a las clases de colección

Hay 13 clases en java.util que se pueden usar para administrar objetos de colección. Admiten colecciones como conjuntos, listas o mapas. un resumen simple de estas clases Introducción

Conjuntos:

HashSet: Implementación de un conjunto usando HashMap. Aunque los conjuntos se definen como desordenados, debe haber alguna manera de encontrar un objeto de manera bastante eficiente. El uso de un objeto HashMap para implementar operaciones de almacenamiento y recuperación de conjuntos se implementa en un tiempo fijo.

TreeSet: Implementación de un conjunto que ordena objetos en orden ascendente. Esto significa que el primer iterador obtenido de un objeto TreeSet proporcionará los objetos en orden ascendente. La clase TreeSet utiliza un TreeMap.

Lista:

Vector: implementa una tabla similar a una matriz que aumenta automáticamente la capacidad para acomodar los elementos que necesita. Utilice subíndices para almacenar y recuperar objetos como en una matriz estándar. También puedes usar un iterador para recuperar objetos de un vector. Vector es la única clase de contenedor sincronizado que funciona bien cuando dos o más subprocesos acceden simultáneamente. (La sincronización significa que solo un proceso puede acceder a él al mismo tiempo y los demás están esperando)

Pila: esta clase se deriva de Vector y agrega métodos para implementar la pila. Estructura de almacenamiento sin salida.

LinkedList: Implementa una lista enlazada. Las listas enlazadas definidas por esta clase también se pueden utilizar como pilas o colas.

ArrayList: Implementa un array cuyo tamaño es variable y al que se puede acceder como una lista enlazada. Proporciona una funcionalidad similar a la clase Vector pero sin sincronización.

Mapeo:

HashTable: implementa un mapa, todas las claves deben ser no nulas. Para funcionar de manera eficiente, la clase que define la clave debe implementar el método hashcode() y el método equal(). Esta clase es una herencia de la implementación anterior de Java y, por lo general, se puede utilizar mejor en otras clases que implementan imágenes.

HashMap: Implementa una imagen que permite almacenar objetos vacíos y permite que la clave esté vacía (dado que la clave debe ser única, por supuesto solo puede haber una).

WeakHashMap: Implementa un mapa donde normalmente, si un objeto ya no hace referencia a una clave, el par clave/objeto se descartará. Esto contrasta con un HashMap, donde las claves de la imagen mantienen la vida útil del par clave/objeto, aunque el programa que utiliza la imagen ya no tiene una referencia a la clave y, por lo tanto, no puede recuperar el objeto.

TreeMap: implementa una imagen en la que los objetos se organizan en orden ascendente por clave.

La siguiente figura muestra la relación entre las interfaces implementadas por la clase de colección:

Set y List se extienden mediante la interfaz pública Collection, por lo que ambos pueden usar una variable de tipo Colección para referencia. Esto significa que se puede hacer referencia a cualquier colección de listas o conjuntos de esta manera, con la excepción de las clases asignadas (pero no excluidas por completo, ya que se puede obtener una lista de un mapa). Por lo tanto, pasar una lista o un conjunto a El enfoque estándar a los métodos es utilizar un parámetro de tipo Colección.

lt; hrgt;

Interfaz de lista

La lista es una colección ordenada. Con esta interfaz, puede controlar con precisión la posición de inserción de cada elemento. Los usuarios pueden acceder a los elementos de la Lista utilizando el índice (la posición del elemento en la Lista, similar a un subíndice de matriz), que es similar a la matriz de Java.

A diferencia del Set que se menciona a continuación, List permite los mismos elementos.

Además del método iterator() necesario para la interfaz Collection, List también proporciona un método listIterator(), que devuelve una interfaz ListIterator. En comparación con la interfaz Iterator estándar, ListIterator tiene más add(). Los métodos de clase permiten agregar, eliminar, configurar elementos y avanzar o retroceder.

Las clases comúnmente utilizadas que implementan la interfaz List son LinkedList, ArrayList, Vector y Stack.

Clase ArrayList

ArrayList implementa una matriz de tamaño variable. Permite todos los elementos, incluido nulo. ArrayList no está sincronizado.

El tiempo de ejecución de los métodos size, isEmpty, get y set es constante. Sin embargo, el costo del método de suma es una constante amortizada y agregar n elementos requiere O(n) tiempo. Otros métodos tienen un tiempo de ejecución lineal.

Cada instancia de ArrayList tiene una capacidad (Capacity), que es el tamaño de la matriz utilizada para almacenar elementos. Esta capacidad aumenta automáticamente a medida que se agregan nuevos elementos, pero el algoritmo de crecimiento no está definido. Cuando es necesario insertar una gran cantidad de elementos, se puede llamar al método sureCapacity para aumentar la capacidad de ArrayList antes de insertarlo para mejorar la eficiencia de la inserción.

Al igual que LinkedList, ArrayList tampoco está sincronizado.

Interfaz de mapa

Tenga en cuenta que Map no hereda la interfaz de Colección. Map proporciona una asignación de clave a valor. Un mapa no puede contener la misma clave y cada clave solo puede asignar un valor. La interfaz del Mapa proporciona tres tipos de vistas de conjuntos. El contenido del Mapa puede considerarse como un conjunto de conjuntos de claves, un conjunto de conjuntos de valores o un conjunto de asignaciones de valores clave.

Clase HashMap

HashMap es similar a Hashtable, excepto que HashMap es asíncrono y permite valores nulos, es decir, valores nulos y claves nulas. , pero cuando se trata a HashMap como una Colección (el método de valores() puede devolver una Colección), el tiempo de sobrecarga de sus suboperaciones de iteración es proporcional a la capacidad de HashMap. Por lo tanto, si el rendimiento de las operaciones iterativas es muy importante, no establezca la capacidad inicial de HashMap demasiado alta ni el factor de carga demasiado bajo.

------------------------------------------- ----------------------------------

1.

List Es una interfaz. La característica de List es el orden, lo que garantiza que los elementos se guarden en un orden determinado.

ArrayList es su clase de implementación, que es una Lista implementada con una matriz.

p>

Map es una interfaz, la función Map es encontrar un objeto basado en un objeto.

HashMap es su clase de implementación. HashMap usa una tabla hash para implementar Map, que usa el código hash de. el objeto (hashcode() es el método de Objeto) para una búsqueda rápida (para búsqueda de hash, consulte lt; lt; estructura de datos gt; gt;)

2.

En circunstancias normales, si no es necesario, el código recomendado es solo el mismo que List, que trata sobre la interfaz del Mapa.

Por ejemplo: List list = new ArrayList();

La razón de esto es que la lista es equivalente a una implementación genérica. Si desea cambiar el tipo de lista, solo necesita:

List list = new LinkedList() //LinkedList es. también la clase de implementación de List y la clase hermana de ArrayList

De esta manera, no hay necesidad de modificar otros códigos. Esta es la elegancia de la programación de interfaces.

Otro ejemplo es. que en un método de clase, se realiza la siguiente declaración:

private void doMyAction(List list){}

De esta manera, este método puede manejar todas las clases que implementan la interfaz List e implementar funciones genéricas hasta cierto punto.

3.

Si cree que el rendimiento de ArrayList y HashMap no es bueno durante el desarrollo. Si no puede satisfacer sus necesidades, puede personalizarlo. su clase personalizada implementando Lista, Mapa (o Colección)

Este artículo proviene del blog de CSDN. Indique la fuente para la reimpresión: /xczheng/archive/2009/02/25 /3936474.aspx. p>