ArrayList et Hashmap
Le stockage de ArrayList est un tableau.
Le stockage de Hashmap est un tableau plus une liste liée.
Les MyArrayList suivants et MyHashMap ne sont pas utilisés dans le travail réel. La chose la plus probable à utiliser est d'interviewer et de trouver un emploi et de tromper les autres. Bien qu'il ne soit pas utile au travail, cela ne signifie pas qu'il est inutile. Cela peut nous aider à comprendre leurs principes de mise en œuvre. Une fois l'implémentation terminée, nous vérifierons soigneusement le code source dans le JDK et nous découvrirons où d'autres personnes peuvent apprendre dans leur implémentation.
MyArrayList
classe publique MyArrayList <e> {private int Capacity = 10; private int size = 0; private e [] valeurs = null; @SuppressWarnings ("Unchecked") public MyArrayList () {valeurs = (e []) Nouvel objet [Capacité]; } @SuppressWarnings ("Unchecked") public MyArrayList (int la capacité) {this.capacity = capacité; valeurs = (e []) nouvel objet [this.capacity]; } public void put (e e) {if (e == null) {throw new RuntimeException ("La valeur ne doit pas être nul."); } if (size> = capacité) {enlargecapacity (); } valeurs [size] = e; taille ++; } public e get (int index) {if (index> = size) {throw new RuntimeException ("L'index:" + index + "est hors de bande."); } return valent [index]; } public void re Support (int index) {if (index> = size) {throw new RuntimeException ("L'index:" + index + "est hors de la bande."); } pour (int i = index; i <size - 1; i ++) {valeurs [i] = valeurs [i + 1]; } valeurs [size - 1] = null; taille--; } @SuppressWarnings ("Unchecked") private void enlargecapacity () {Capacité = capacité * 2; E [] tmpValues = (e []) nouvel objet [capacité]; System.ArrayCopy (valeurs, 0, tmpValues, 0, taille); valeurs = tmpValues; } public String toString () {StringBuilder sb = new StringBuilder (); SB.APPEND ("["); pour (int i = 0; i <size; i ++) {sb.append (valeurs [i]). APPEND (","); } if (size> 0) {sb.deletecharat (sb.length () - 1); } sb.append ("]"); return sb.toString (); } / ** * @param args * / public static void main (string [] args) {myArrayList <string> myList = new MyArrayList <string> (); myList.put ("1"); myList.put ("2"); myList.put ("3"); myList.put ("4"); myList.put ("5"); myList.put ("6"); myList.put ("7"); myList.put ("8"); myList.put ("9"); MyList.Remove (7); System.out.println (MyList.ToString ()); }} Myhashmap
classe publique MyHashMap <K, v> {// Capacité d'initialisation Private int Capacité = 10; // Total entités private int size = 0; entité privée <k, v> [] entités = null; @SuppressWarnings ("Unchecked") public myhashmap () {entités = nouvelle entité [capacité]; } public void put (k key, v valeur) {if (key == null) {throw new RuntimeException ("la clé est nul"); } rehash (); Entité <k, v> newentity = nouvelle entité <k, v> (clé, valeur); put (newentity, this.entities, this.capacity); } private void put (entité <k, v> newentity, entité <k, v> [] entités, int la capacité) {int index = newentity.getKey (). hashcode ()% capaciment; Entité <k, v> entité = entités [index]; Entité <k, v> PremierEntity = entités [index]; if (entity == null) {entités [index] = newentity; taille ++; } else {if (newentity.getKey (). equals (entity.getKey ())) {// trouver la même clé pour la première entité, si trouver puis remplacer l'ancienne valeur en nouvelle valeur newentity.setNext (entity.getNext ()); newentity.setpre (entity.getPre ()); if (entity.getNext ()! = null) {entity.getNext (). SetPre (NewEntity); } entités [index] = newentity; } else if (entity.getNext ()! = null) {while (entity.getNext ()! = null) {// Trouvez la même touche pour toute l'entité suivante, si trouver puis remplacez l'ancienne valeur en valeur nouvelle entité = entity.getNext (); if (newentity.getKey (). equals (entity.getKey ()))) {newentity.setpre (entity.getPre ()); newentity.setNext (entity.getNext ()); if (entity.getNext ()! = null) {entity.getNext (). SetPre (NewEntity); } entités [index] = newentity; retour; }} // Impossible de trouver la même clé, puis d'insérer la nouvelle entité sur l'en-tête Newentity.SetNext (FirstEntity); newentity.setpre (FirstEntity.getPre ()); FirstEntity.SetPre (NewEntity); entités [index] = newentity; taille ++; } else {// Impossible de trouver la même clé, puis mettez la nouvelle entité dans head newentity.setNext (FirstEntity); FirstEntity.SetPre (NewEntity); entités [index] = newentity; taille ++; }}} public v get (k key) {if (key == null) {throw new RuntimeException ("la clé est null"); } int index = key.hashcode ()% Capacité; Entité <k, v> entité = entités [index]; if (entité! = null) {if (entity.getKey (). equals (key)) {return Entity.getValue (); } else {entity = entity.getNext (); while (entity! = null) {if (entity.getKey (). equals (key)) {return Entity.getValue (); } entity = entity.getNext (); }}} return null; } public void retire (k key) {if (key == null) {throw new RuntimeException ("la clé est null"); } int index = key.hashcode ()% Capacité; Entité <k, v> entité = entités [index]; if (entité! = null) {if (entity.getKey (). equals (key)) {if (entity.getNext ()! = null) {// Supprimez la première entité entité.getNext (). setPre (entity.getPre ()); entités [index] = entity.getNext (); entité = null; } else {// vide cet index entités [index] = null; } taille--; } else {entity = entity.getNext (); while (entity! = null) {if (entity.getKey (). equals (key)) {if (entity.getNext ()! = null) {entity.getPre (). setNext (entity.getNext ()); entity.getNext (). setPre (entity.getPre ()); entité = null; } else {// Libérez l'entité Found entity.getPre (). setNext (null); entité = null; } taille--; retour; } entity = entity.getNext (); }}}} public String toString () {StringBuilder sb = new StringBuilder (); pour (int i = 0; i <capacine; i ++) {sb.append ("index ="). APPEND (i) .append ("["); booléen hasentity = false; Entité <k, v> entité = entités [i]; if (entité! = null) {Hasentity = true; } while (entity! = null) {sb.append ("["). APPEND (entity.getKey ()). APPEND ("="). APPEND (entity.getValue ()). APPEND ("]"). APPEND (","); entité = entité.getNext (); } if (hasentity) {sb.deletecharat (sb.length () - 1); } sb.append ("] / n"); } return sb.toString (); } / ** * Stratégie de ré-hash simple, si la taille est plus grande que la capacité, alors ré-hash Action * / private void rehash () {if (size> = capacité) {int newcapacity = capacité * 2; @SuppressWarnings ("non cochée") entité <k, v> [] newentities = new Entity [newCapacity]; pour (int i = 0; i <capacité; i ++) {entité <k, v> entité = entités [i]; while (entité! = null) {put (entité, newentities, newcapacity); entité = entité.getNext (); }} this.capacity = newCapacity; this.entities = newentities; }} public static void main (string [] args) {myhashmap <string, string> map = new myhashmap <string, string> (); map.put ("un", "1"); map.put ("deux", "2"); map.put ("trois", "3"); map.put ("quatre", "4"); map.put ("Five", "5"); map.put ("six", "6"); map.put ("sept", "7"); map.put ("huit", "8"); map.put ("Nine", "9"); map.put ("dix", "10"); System.out.println (map.get ("un")); System.out.println (map.get ("deux")); System.out.println (map.get ("trois")); System.out.println (map.get ("quatre")); System.out.println (map.get ("Five")); System.out.println (map.get ("Six")); System.out.println (map.get ("sept")); System.out.println (map.get ("huit")); System.out.println (map.get ("nine")); System.out.println (map.get ("Ten")); System.out.println (map.toString ()); Map.Remove ("Nine"); map.remove ("trois"); System.out.println (map.get ("un")); System.out.println (map.get ("deux")); System.out.println (map.get ("trois")); System.out.println (map.get ("quatre")); System.out.println (map.get ("Five")); System.out.println (map.get ("Six")); System.out.println (map.get ("sept")); System.out.println (map.get ("huit")); System.out.println (map.get ("nine")); System.out.println (map.get ("Ten")); System.out.println (map.toString ()); }} Entité de classe <k, v> {clé privée k; valeur en V privée; entité privée <k, v> pre; entité privée <k, v> suivant; Entité publique (k key, vale v) {this.key = key; this.value = valeur; } public k getKey () {return key; } public void setKey (k key) {this.key = key; } public v getValue () {return Value; } public void setValue (V valeur) {this.value = valeur; } entité publique <k, v> getPre () {return pre; } public void setPre (entité <k, v> pre) {this.pre = pre; } entité publique <k, v> getNext () {return net; } public void setNext (entité <k, v> suivant) {this.next = next; }}Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!