Come ho capito, LinkedHashMap estende HashMap e LinkedHashMap.Entry estende anche HashMap.Entry.Informazioni su acessOrder LinkedHashMap Implementazione in java
LinkedHashMap ha due attributi principali 1) intestazione che è un LinkedHashMap.Entry nodo. e 2) ereditato tabella che è HashMap.Entry [] array. Ora la tavolo matrice in LinkedHashMap è assegnato di LinkedHashMap.Entry in fase di esecuzione e questo è curato da sotto metodo:
/**
* This override differs from addEntry in that it doesn't resize the
* table or remove the eldest entry.
*/
void createEntry(int hash, K key, V value, int bucketIndex) {
HashMap.Entry<K,V> old = table[bucketIndex];
Entry<K,V> e = new Entry<>(hash, key, value, old);
table[bucketIndex] = e;
e.addBefore(header);
size++;
}
prime tre righe del metodo effettivamente converte HashMap .Entry a LinkedHashMap.Entry e mantiene anche i riferimenti di dopo e prima della voce in un modo tale che prima di intestazione sta puntando all'ultimo elemento in ordine e di ultimo elemento dopo sta indicando intestazione cerchio di formazione.
Ora, quando si crea un esempio di una delle mappe (utilizzando nuovo costruttore), nessuna memoria viene allocata per attributo tabella come appena inizializzato al tavolo vuoto.
Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();
Ora consente di dire che facciamo i nostri mette: -
linkedHashMap.put("a", "A");
linkedHashMap.put("b", "B");
linkedHashMap.put("c", "C");
Dopo queste dichiarazioni la nostra struttura dati LinkedHashMap (tavolo array è inizializzato dopo la prima messa) sarebbe simile nella foto . Ho contrassegnato gli elementi a, b e c per una facile consultazione. Capisco che l'ordine reale non sarebbe lo stesso. Trovo che questa struttura di dati sia piuttosto complessa, così tanti riferimenti. Ha una doppia lista collegata mantenuta in modo molto diverso e per scopi diversi e anche una singola lista collegata per la normale hashmap e anche quella nella stessa voce. La mia comprensione è corretta?
Grazie per il collegamento JavaArticles. Testimonia (anche se ad alto livello) ciò che ho fatto di ispezione del codice. E sì, non voglio che la struttura dei dati sia complessa. L'ho trovato complesso all'inizio :) e credo di non essere solo in questo. – nanosoft