HashMap.put

Primero necesitamos entender los datos almacenados en la deconstrucción deconstrucción física sólo dos (deconstrucción almacenada secuencialmente) (cadenas de tiendas deconstrucción);
(como pilas, colas, árboles, etc., de la estructura lógica de la figura abstracta a mapeados en memoria)

Entonces, ¿qué si nos imaginamos a nosotros mismos para lograr método put de un HashMap () del diseño?

Si vamos a considerar cuando necesitamos un depósito cuando los datos de estos datos en la colección de lista en el interior del complemento () estos datos
cuando se almacenan los datos antes de la segunda venida de nuestro listado de entre determinar si allí tienen, de acuerdo con estos datos a través del bucle ( conveniencia) para compararlo para conseguir esta funcionalidad parece haber ningún problema?
Este enfoque es O (N) algoritmo cuántas veces los datos del ciclo nosotros cuántas veces la cantidad de datos aumenta proporcional al tiempo que consume

Algoritmo - O (1), O ( n), O (log n), o (nlogn)
que describe la complejidad del algoritmo utilizado o (1), O (n ), O (log n), o (nlogn) indica que el algoritmo correspondiente complejidad del tiempo, el espacio y el tiempo de complejidad del algoritmo se expresa. No sólo se utiliza para representar la complejidad del tiempo también se utiliza para la complejidad espacial.
O paréntesis detrás una función que indica la relación entre el espacio de datos / consumo de tiempo de incremento de un algoritmo. Donde n representa la cantidad de datos de entrada.
Tales como la complejidad de tiempo es O (n), representa la cantidad de datos se incrementa varias veces, consumiendo aumenta varias veces. Tal como el algoritmo de recorrido común.
Otro ejemplo es la complejidad de tiempo de O (n 2), representa la cantidad de datos aumenta n veces, n veces el cuadrado de la que consume tiempo aumentado, lo que es más alta que la complejidad lineal del tiempo. Por ejemplo ordenamiento de burbuja, es un O típica (n 2) del algoritmo, el número n de la clase necesaria para n exploración × n veces.
Otro ejemplo O (log n), cuando se aumenta el de datos n veces, consumiendo pliegue aumento logn (base de registro 2 está aquí, por ejemplo, cuando los datos se aumenta 256 veces, 8 veces consumiendo sólo aumentar, incluso es más baja que la complejidad del tiempo lineal).
La búsqueda binaria es O (log n) algoritmo, de encontrar una vez cada media excluye la posibilidad de 256 miradas de datos sólo tiene que encontrar ocho a encontrar el objetivo.
O (nlogn) Del mismo modo, logN se multiplica por n, cuando los datos se aumenta 256 veces, 256 * 8 = Procesado aumentó 2048 veces. Más bajo que el anterior complejidad lineal de esta plaza. Combinar especie es O (nlogn) complejidad del tiempo.
O (1), que es el tiempo mínimo y la complejidad espacial, que es nada que ver el consumo de tiempo / espacio y el tamaño de los datos de entrada, independientemente de los datos de entrada aumenta muchas veces, el consumo de tiempo / espacio son los mismos. algoritmo de hash es una típica O (1)
complejidad del tiempo, independientemente de la cantidad de datos de la escala, se puede encontrar el destino después de un cálculo (sin tener en cuenta el conflicto de las palabras)

Pero a continuación, pasamos O (n) algoritmo de tiempo para facilitar, a continuación, si se necesita una enorme cantidad de datos que será impredecible en este momento de las maneras de resolver este problema?

algoritmo de hash que es posible que desee utilizar ambos empaques (1) algoritmo de tiempo, cada uno de los tipos de datos de referencia de objeto que fue a su HashCode valor de hash calculado padecerá esta enfermedad y luego encontrar los datos correspondientes al valor del índice del índice en el índice correspondiente ubicación, así que aumentamos la cantidad de datos no importa cuántas veces no cambiará la necesidad de tiempo único para encontrar el valor de lo que necesitamos;

Si utilizamos esta manera, en caso de una gran cantidad de datos bien no fue ver cuál es el problema, pero si es menos de los datos, a continuación, para la pérdida de espacio, como mejorarla?

Si podemos Hashcode% en el valor de un objeto, por ejemplo nuestra capacidad inicial de más de 12 obtendrá un valor de más de este valor corresponde al índice de matriz si vamos a ser un importante ahorro en espacio y luego el índice va a almacenar múltiples valores adoptamos la lista se pueden almacenar en la forma de tiempo adicional que de nuevo facilitamos método de alineación por iguales algoritmo () para determinar si el valor de la misma por O (n)
en este punto que introducirá la estructura de la lista y un conjunto de varios valor inicial puede configuración HashMap en cuyo método ver:

  • initialCapacity: capacidad inicial. Se refiere a una colección de HashMap inicialización de su capacidad. Se puede especificar en el constructor, si no se especifica, el valor predeterminado es la capacidad total de 16. Tenga en cuenta que la capacidad inicial debe ser una potencia de dos.
  • loadFactor: factor de carga. El factor de carga se llama el HashMap (capacidad de corriente / de la capacidad total) cuando se alcanza un cierto valor, HashMap
    expansión se llevará a cabo. El factor de carga también puede ser especificado por el constructor, el valor predeterminado es 0,75. Por ejemplo, suponga una capacidad inicial HashMap es 16
    , el umbral de expansión es de 0,75 * 16 = 12. En otras palabras, vas en el 13, cuando el valor, HashMap primera ejecutará expansión.
  • Umbral: el umbral de expansión. Es decir, la capacidad total del umbral de expansión * = factor de carga HashMap. Cuando la capacidad actual es mayor que o igual a la expansión HashMap será para realizar umbral de expansión. La expansión de la capacidad de dos veces la capacidad total actual de HashMap. Por ejemplo, la capacidad de corriente total de HashMap 16, a continuación, después de la expansión fue de 32.
  • tabla: array de entrada. Todos sabemos que el HashMap interno para almacén de claves / valor de entrada es a través de este medio de lograr. La tabla es una matriz de entrada.
    Aquí Insertar imagen Descripción
    Simple, además de la lista subyacente es una matriz de matrices para lograr un cuerpo de estructura es la HashMap HashMap
  • Si la lista no es una posición que corresponde al índice (el punto de entrada actual a la siguiente nulo) a continuación, añadir a las operaciones de búsqueda es más rápido y otras operaciones sólo una vez al valor de dirección;
  • Si la posición correspondiente debería tener una lista de la complejidad es O (n) veces, atravesando existe para la nueva cubierta. De lo contrario, todavía tiene que encontrar toda la comodidad equivale a continuación, comparar la lista cuando aparece términos HashMap dentro de desempeño mientras menos, mejor será el rendimiento
//这是一个神奇的函数,用了很多的异或,移位等运算,对key的hashcode进一步进行计算以及二进制位的调整等来保证最终获取的存储位置尽量分布均匀 尽可能的减少Hash冲突 位运算代替模运算直接二进制运算不用转换成十进制
final int hash(Object k) {
        int h = hashSeed;
        if (0 != h && k instanceof String) {
            return sun.misc.Hashing.stringHash32((String) k);
        }

        h ^= k.hashCode();

        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }

En Java 1.8, si la longitud de la lista de 8, a continuación, la lista se convierte en árbol rojo-negro; fracción 2 es encontrar un método

Cuando se producen las colisiones de condensación, Java 1.7 se inserta en la cabecera de la lista, y Java 1.8 se inserta en la cola de la lista;

¿Por qué siempre usan cadena como una llave, porque las cadenas son inmutables probabilidades de cadena de colisión hash es relativamente pequeña

Publicado 23 artículos originales · ganado elogios 2 · Vistas 925

Supongo que te gusta

Origin blog.csdn.net/metjoyful/article/details/104197008
Recomendado
Clasificación