Structure Carte classe de mise en œuvre
Carte : double rangée de données, les données stockées danspaires de valeurs-clés
HashMap : Carte de classe comme la principale réalisation, thread-safe, rendement élevé, nul et peut stocker la valeur de clé
Le support HashMap :
liste Array + -> avant jdk7
tableau + + liste arbre rouge-noir -> jdk8
A LinkedHashMap : garantie touttraversant l'élément de carte,traversée peut être obtenue (afin d'ajouter le motif: la structure de l'original sur le fond de la tablehachage,ajoutune paire de pointeurs, un élément avant et un pointeur arrière de l'opération de traversée fréquente,exemple le rendement est plus élevé que HashMap)
TreeMap : garantie conformément à la principale valeur ajoutée de la sorte, pour atteindre le traversal de tri. A cette époque, compte tenula clé oucommande commande personnalisée naturelle,utilisant l'arbre rouge-noir sous-jacent
Hashtable : Comme l'ancienne classe d'implémentation: thread-safe, faible efficacité ne peut pas stocker la valeur de clé et nulle
Propriétés : permet de gérerfichiers de configuration. clé etvaleur sont de type String
Carte la clé : désordre, répétable, utilisez les tous ensemble les magasins de la clé -> touche de classe où vous voulez remplacer égaux et hashCode () (à HashMap par exemple)
Carte de la valeur : désordonnée, reproductible, tout à valeur> classe où la valeur utilisée pour réécrire le stockage Collection est égal à ()
Une paire de valeurs de clé : valeur - clé objet d'entrée constitue une
Carte d'entrée : désordre, répétable, utiliser l'ensemble des magasins toutes les entrées
Deux façons de traverser la valeur clé
Méthode 1 :
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while(iterator1.hasNext()){
Object obj = iterator1.next();
//entrySet集合中的元素都是entry
Map.Entry entry = (Map.Entry) obj;
//entry.getKey(),entry.getValue()
}
Deuxième moyen :
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while(iterator1.hasNext()){
Object key = iterator1.next();
Object value = map.get(key);
}
HashMap map = new HashMap();
在实例化以后,底层创建了长度是16的一维数组Entry[] table
... 可能已经执行过多次put ...
map.put(key1, value1);
Tout d'abord, en appelant la classe hashCode key1 où () key1 calculé la valeur de hachage, la valeur de hachage après après un algorithme de calcul pour obtenir l'emplacement de stockage dans la matrice d'entrée.
Si les données de cette position vide, dans ce cas-key1 valeur1 ajouté avec succès. -----> 1.
Si les données de cette position n'est pas vide, (ce qui signifie de position qu'il ya une ou plusieurs données (présent sous la forme d'une liste chaînée)), et un ou plusieurs key1 comparant les données existantes valeur de hachage:
Si la valeur de hachage avec les données de valeur de hachage key1 existantes ne sont pas les mêmes, puis ajoutez le succès key1-valeur1. ----> Cas 2
Les valeurs de hachage identiques et si une certaine donnée (key2 -value2) déjà existante valeur de hachage key1, la comparaison se poursuit: appeler la classe où key1 égaux (key2):
Si égaux () retourne false: A ce moment, ajouter key1-valeur1 succès ----> 3 où
si égaux () retourne vrai: l'utilisation de valeur2 value1 alternatif
2 et 3 sur la situation: Le cas key1-valeur1 et les données d'origine sont stockées dans une liste chaînée
Ajouter dans le processus constant d'expansion impliquera la question, lorsque le seuil est dépassé (et à la position mémorisée est pas vide), l'expansion. Le mode par défaut d'extension: extension à la capacité initiale de 2 fois, et copie sur le tableau original
1, newHashMap (): la couche inférieure ne créent pas un tableau de longueur 16
2, le fond jdk8 de la matrice est la suivante: Node [], au lieu de l'entrée []
3, le premier appel à la méthode put () pour créer la matrice sous-jacente de longueur 16
4, sous-structure jdk7 seulement: + liste de tableau. jdk8 la structure sous-jacente: Array + + liste noire arbre
Lorsque le nombre d'éléments de données sur une certaine position dans l'index de tableau est présent sous forme de liste> et la longueur actuelle de la matrice 8> 64, au cours de laquelle toutes les données sur la position de l'arbre d'index est stocké au rouge-noir
DEFAULT_INITIAL_CAPACITY : La capacité par défaut est 16 hashmap
DEFAULT_LOAD_FACTOR : le facteur de charge par défaut HashMap: 0,75
Seuil : seuil d'expansion, = facteur de capacité de remplissage *: 0,75 * 16 -> 12
TREIFY_THRESHOLD : Godet dans la longueur de chaîne est supérieure à la valeur par défaut, est converti en arbre rouge-noir: jdk8
MIN_TREEIFY_CAPACITY capacité minimum de table de hachage de la baignoire est Node tree: 64
Source :
static class Entry<K,V> extends HashMap.Node<K,V>{
Entry<K,V> before, after;//能够记录添加的元素先后顺序
Entry(int hash, K key, V value, Node<K,V> next){
super(hash, key, value, next);
}
}
Héritage HashMap, à l'aide des touches du nœud est nœud hashmap entité dont il a hérité et a ajouté deux références, respectivement avant et après. Pour le maintien d'une liste doublement chaînée
Ajoutant à la TreeMap valeur-clé doit être demandée par l'objet créé dans la même classe
à être triés selon clé: ordre naturel, tri personnalisé (Non classé par valeur!)
ordre naturel : interface Comparable mis en œuvre, la méthode compareTo override
commande personnalisée : nouvelle Comparator () classe interne
Properties pros = new Properties();
FileInputStream fis = new FileInputStream("jdbc.properties");
pros.load(fis);//加载流对应的文件
pros.getProperty("文件中对应的值");