Carte collection d'analyse de code source ----

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 compréhension de la structure:

   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);
}

La réalisation du principe HashMap sous-jacente? (JDK7 par exemple)
  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

jdk8 par rapport à différents jdk7 en termes de mise en œuvre sous-jacente:

   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


Le principe qui sous-tend la LinkedHashMap

   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


TreeMap:

    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


Propriétés: utilisé pour les fichiers de configuration de la poignée, la clé et la valeur sont de type String
Properties pros = new Properties();
FileInputStream fis = new FileInputStream("jdbc.properties");
pros.load(fis);//加载流对应的文件
pros.getProperty("文件中对应的值");
发布了67 篇原创文章 · 获赞 19 · 访问量 9873

Je suppose que tu aimes

Origine blog.csdn.net/qq_41530004/article/details/103923932
conseillé
Classement