ArrayList und HashMap
Der Speicher von ArrayList ist ein Array.
Der Speicher von HashMap ist ein Array sowie eine verknüpfte Liste.
Die folgende MyArrayList und MyHasMap werden in der tatsächlichen Arbeit nicht verwendet. Das wahrscheinlichste, was man nutzen muss, ist zu interviewen, einen Job zu finden und andere zu täuschen. Obwohl es bei der Arbeit nicht nützlich ist, heißt es nicht, dass es nutzlos ist. Es kann uns helfen, ihre Umsetzungsprinzipien zu verstehen. Nach Abschluss der Implementierung werden wir den Quellcode im JDK sorgfältig überprüfen und herausfinden, wo andere Personen in ihrer Implementierung lernen können.
MyArrayList
public class myarrayList <e> {private int capacity = 10; private int size = 0; private e [] Werte = null; @SuppressWarnings ("deaktiviert") public myArrayList () {values = (e []) neues Objekt [Kapazität]; } @SuppressWarnings ("Deaktiviert") public myArrayList (int -Kapazität) {this.capacity = Kapazität; values = (e []) neues Objekt [this.capacity]; } public void put (e e) {if (e == NULL) {neue runTimeexception werfen ("Der Wert sollte nicht null sein."); } if (Größe> = Kapazität) {Enlargecapacity (); } Werte [Größe] = e; Größe ++; } public e get (int index) {if (index> = size) {throf New RunTimeException ("Der Index:" + index + "ist aus dem Band."); } Rückgabewerte [Index]; } public void remove (int index) {if (index> = size) {neue runimeexception werfen ("Der Index:" + index + "ist aus dem Band nicht."); } für (int i = index; i <size - 1; i ++) {values [i] = values [i+1]; } Werte [Größe - 1] = null; Größe--; } @SuppressWarnings ("deaktiviert") private void Enlargecapacity () {CAPAPY = CAPAPY * 2; E [] tmpvalues = (e []) neues Objekt [Kapazität]; System.ArrayCopy (Werte, 0, tmpvalues, 0, Größe); Werte = tmpvalues; } public String toString () {StringBuilder sb = new StringBuilder (); sb.Append ("["); für (int i = 0; i <size; i ++) {sb.append (Werte [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
öffentliche Klasse myhashMap <k, v> {// Initialisierungskapazität private int -Kapazität = 10; // Gesamtentitäten privat int size = 0; private Entity <k, v> [] Entitäten = null; @SuppressWarnings ("Deaktiviert") public myhashMap () {Entities = new Entity [Kapazität]; } public void put (k key, v value) {if (key == null) {neue RunTimeException werfen ("Der Schlüssel ist null"); } rehash (); Entity <K, v> newEntity = new Entity <k, v> (Schlüssel, Wert); put (NewEntity, this.entity, this.capacity); } private void put (Entity <k, v> NewEntity, Entity <k, v> [] Entitäten, int Kapazität) {int index = newEntity.getKey (). HashCode () % Kapazität; Entity <K, v> Entity = Entities [Index]; Entity <K, v> FirstEntity = Entities [Index]; if (entity == null) {Entities [index] = newEntity; Größe ++; } else {if (newEntity.getKey (). Equals (entity.getKey ()) {// Finden Sie denselben Schlüssel für die erste Entität, falls finden Sie den alten Wert auf New Value NewEntity.SetNext (entity.getNext ()); newEntity.setpre (entity.getPre ()); if (entity.getNext ()! = null) {entity.getNext (). setPre (NewEntity); } Entitäten [index] = newEntity; } else if (entity.getNext ()! = null) {while (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äten [index] = newEntity; zurückkehren; }} // kann nicht denselben Schlüssel finden und dann die neue Entität in die Header NewEntity.SetNext (FirstEntity) einfügen; newEntity.setpre (firstEntity.getPre ()); FirstEntity.setPre (NewEntity); Entitäten [Index] = NewEntity; Größe ++; } else {// kann nicht den gleichen Schlüssel finden, dann die neue Entität in Head NewEntity.SetNext (FirstEntity) einfügen; FirstEntity.setPre (NewEntity); Entitäten [Index] = NewEntity; Größe ++; }}} public v get (k key) {if (key == null) {neue RunTimeException werfen ("Der Schlüssel ist null"); } int index = key.hashCode () % Kapazität; Entity <K, v> Entity = Entities [Index]; if (entity! } else {entity = entity.getNext (); while (entity! } entity = entity.getNext (); }}} return null; } public void remove (k key) {if (key == null) {neue RunTimeException werfen ("Der Schlüssel ist null"); } int index = key.hashCode () % Kapazität; Entity <K, v> Entity = Entities [Index]; if (entity! Entitäten [index] = entity.getNext (); Entität = null; } else {// leeren Sie diese Index Entitäten [index] = null; } Größe--; } else {entity = entity.getNext (); while (entity! entity.getNext (). setPre (entity.getPre ()); Entität = null; } else {// Die found entity entity.getPre () setNext (null) freigeben; Entität = null; } Größe--; zurückkehren; } entity = entity.getNext (); }}}} public String toString () {StringBuilder sb = new StringBuilder (); für (int i = 0; i <Kapazität; i ++) {sb.append ("index ="). append (i) .Append ("["); boolean hasentity = falsch; Entity <k, v> Entity = Entitäten [i]; if (Entity! = NULL) {Hasentity = true; } while (entity! entity = entity.getNext (); } if (hasEntity) {sb.deletecharat (sb.length () - 1); } sb.append ("]/n"); } return sb.toString (); } / ** * Einfache Re-Hash-Strategie, wenn die Größe größer als die Kapazität ist, dann haben Sie eine Re-Hash-Aktion * / private void reehash () {if (size> = Kapazität) {int newCapacity = Kapazität * 2; @SuppressWarnings ("deaktiviert") Entity <K, v> [] NewEntities = New Entity [NewCapacity]; für (int i = 0; i <Kapazität; i ++) {Entity <k, v> Entity = Entities [i]; while (entity! entity = entity.getNext (); }} this.capacity = newCapacity; this.Entities = NewEntities; }} public static void main (String [] args) {myhashMap <String, String> map = new MyHashMap <String, String> (); map.put ("eins", "1"); map.put ("zwei", "2"); map.put ("drei", "3"); map.put ("vier", "4"); map.put ("fünf", "5"); map.put ("sechs", "6"); map.put ("sieben", "7"); map.put ("acht", "8"); map.put ("neun", "9"); map.put ("zehn", "10"); System.out.println (map.get ("eins")); System.out.println (map.get ("zwei")); System.out.println (map.get ("drei")); System.out.println (map.get ("vier")); System.out.println (map.get ("fünf")); System.out.println (map.get ("sechs")); System.out.println (map.get ("sieben")); System.out.println (map.get ("acht")); System.out.println (map.get ("neun")); System.out.println (map.get ("zehn")); System.out.println (map.toString ()); map.remove ("neun"); map.remove ("drei"); System.out.println (map.get ("eins")); System.out.println (map.get ("zwei")); System.out.println (map.get ("drei")); System.out.println (map.get ("vier")); System.out.println (map.get ("fünf")); System.out.println (map.get ("sechs")); System.out.println (map.get ("sieben")); System.out.println (map.get ("acht")); System.out.println (map.get ("neun")); System.out.println (map.get ("zehn")); System.out.println (map.toString ()); }} Klasse Entity <k, v> {private k key; privater V -Wert; privat <k, v> pre; privat <k, v> Weiter; öffentliche Entität (K Key, V -Wert) {this.Key = key; this.Value = Wert; } public k getKey () {return key; } public void setKey (k key) {this.key = key; } public v getValue () {Rückgabewert; } public void setValue (V -Wert) {this.Value = value; } öffentliche Entität <k, v> getPre () {return pre; } public void setPre (Entity <k, v> pre) {this.pre = pre; } öffentliche Entität <k, v> getNext () {return Next; } public void setNext (Entity <k, v> next) {this.Next = next; }}Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!