Arraylist и Hashmap
Хранение ArrayList - это массив.
Хранение HashMap - это массив плюс связанный список.
Следующие myarraylist и myhashmap не используются в реальной работе. Наиболее вероятная вещь, которую можно использовать, - это взять интервью и найти работу и обмануть других. Хотя это не полезно на работе, это не означает, что это бесполезно. Это может помочь нам понять их принципы реализации. После того, как реализация будет завершена, мы тщательно проверим исходный код в JDK, и мы узнаем, где другие люди могут узнать в их реализации.
Myarraylist
открытый класс myarraylist <e> {private int емкость = 10; private int size = 0; private e [] values = null; @Suppresswarnings ("unchecked") public myarraylist () {values = (e []) новый объект [емкость]; } @Suppresswarnings ("unchecked") public myarraylist (int емкость) {this.capacity = емкость; values = (e []) новый объект [this.capacity]; } public void put (e e) {if (e == null) {бросить новое runtimeexception («значение не должно быть нулевым.»); } if (size> = емкость) {enlargeCapacity (); } значения [size] = e; размер ++; } public e get (int index) {if (index> = size) {бросить новое runtimeexception ("Индекс:" + index + "выходит из полосы."); } возвращаемые значения [index]; } public void remove (int index) {if (index> = size) {бросить новое runtimeexception ("index:" + index + "выходит из полосы."); } for (int i = index; i <size - 1; i ++) {values [i] = values [i+1]; } значения [size - 1] = null; размер--; } @Suppresswarnings ("unchecked") private void enlargecapacity () {емкость = емкость * 2; E [] tmpvalues = (e []) новый объект [емкость]; System.ArrayCopy (значения, 0, tmpValues, 0, size); значения = tmpvalues; } public String toString () {stringBuilder sb = new StringBuilder (); SB.Append ("["); for (int i = 0; i <size; i ++) {sb.append (values [i]). Append (","); } if (size> 0) {sb.deleteCharat (sb.length () - 1); } sb.append ("]"); вернуть 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
открытый класс myhashmap <k, v> {// емкость инициализации private int емкость = 10; // Общее количество организаций Private Int Size = 0; частная организация <K, v> [] entities = null; @Suppresswarnings ("unchecked") public myhashmap () {entities = new Entity [емкость]; } public void put (k key, v value) {if (key == null) {бросить новое runtimeexception («ключ null»); } rehash (); Entity <K, v> newentity = new Entity <K, V> (ключ, значение); положить (новое, это. } private void put (Entity <K, V> Newentity, Entity <K, V> [] Entities, int емкость) {int index = newentity.getKey (). HashCode () % емкость; Entity <K, V> Entity = Entities [Index]; Entity <K, V> FirstEntity = Entities [Index]; if (Entity == null) {intities [index] = newentity; размер ++; } else {if (newentity.getkey (). evalls (entity.getkey ())) {// Найти тот же ключ для первой объекта, если найдите, замените старое значение на новое значение newentity.setnext (entity.getnext ()); newEntity.setPre (entity.getPre ()); if (entity.getnext ()! = null) {entity.getnext (). setpre (newentity); } объекты [index] = newentity; } else if (entity.getnext ()! = null) {while (entity.getnext ()! = null) {// Найти один и тот же ключ для всех следующих объектов, если найдите, то замените старое значение на новое значение entity = entity.getnext (); if (newentity.getkey (). equals (entity.getkey ()))) {newentity.setpre (entity.getpre ()); newEntity.setNext (entity.getNext ()); if (entity.getnext ()! = null) {entity.getnext (). setpre (newentity); } объекты [index] = newentity; возвращаться; }} // не может найти такую же ключ, затем вставьте новую сущность в заголовок newentity.setNext (FirstEntity); newEntity.setPre (FirstEntity.getPre ()); FirstEntity.SetPre (NewEntity); сущности [index] = newentity; размер ++; } else {// не может найти тот же ключ, а затем поместите новую сущность в Head newentity.setNext (FirstEntity); FirstEntity.SetPre (NewEntity); сущности [index] = newentity; размер ++; }}} public v get (k key) {if (key == null) {throw new Runtimeexception ("Ключ null"); } int index = key.hashcode () % емкость; Entity <K, V> Entity = Entities [Index]; if (entity! = 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 remove (k key) {if (key == null) {бросить новое runtimeexception («ключ null»); } int index = key.hashcode () % емкость; Entity <K, V> Entity = Entities [Index]; if (Entity! = null) {if (entity.getKey (). equals (key)) {if (entity.getNext ()! = null) {// Удалить первую Entity Entity.getNext (). setPre (entity.getPre ()); объекты [index] = entity.getNext (); Entity = null; } else {// опустошить эти индексные объекты [index] = null; } размер--; } 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 ()); Entity = null; } else {// выпустить найденную entity entity.getpre (). setNext (null); Entity = null; } размер--; возвращаться; } entity = entity.getNext (); }}}} public String toString () {StringBuilder sb = new StringBuilder (); for (int i = 0; i <емкость; i ++) {sb.append ("index ="). Приложение (i) .append ("["); логический Hasentity = false; Entity <K, V> Entity = Entities [i]; if (Entity! = null) {hasentity = true; } while (entity! = null) {sb.append ("["). Append (entity.getKey ()). Append ("="). Append (entity.getValue ()). Append ("]"). Append (","); Entity = entity.getNext (); } if (hasentity) {sb.deleteCharat (sb.length () - 1); } sb.append ("]/n"); } вернуть sb.toString (); } / ** * Простая стратегия повторного задержки, если размер больше емкости, то выполните действие re-hash * / private void rehash () {if (size> = емкость) {int newcapacity = емкость * 2; @Suppresswarnings ("unchecked") Entity <K, v> [] newentity = new Entity [newCapacity]; for (int i = 0; i <емкость; i ++) {entity <k, v> entity = entities [i]; while (Entity! = null) {put (Entity, NewEntities, NewCapacity); Entity = entity.getNext (); }} this.capacity = newCapacity; this.Enterities = newEntities; }} public static void main (string [] args) {myhashmap <string, string> map = new myhashmap <string, string> (); map.put ("One", "1"); map.put ("два", "2"); map.put ("three", "3"); map.put ("четыре", "4"); map.put ("пять", "5"); map.put ("six", "6"); map.put ("семь", "7"); map.put ("восемь", "8"); map.put ("Nine", "9"); map.put ("десять", "10"); System.out.println (map.get ("One")); System.out.println (map.get ("два")); System.out.println (map.get ("three")); System.out.println (map.get ("четыре")); System.out.println (map.get ("пять")); System.out.println (map.get ("six")); System.out.println (map.get ("Seven")); System.out.println (map.get ("Восемь")); System.out.println (map.get ("Nine")); System.out.println (map.get ("ten")); System.out.println (map.toString ()); map.remove ("Nine"); map.remove ("three"); System.out.println (map.get ("One")); System.out.println (map.get ("два")); System.out.println (map.get ("three")); System.out.println (map.get ("четыре")); System.out.println (map.get ("пять")); System.out.println (map.get ("six")); System.out.println (map.get ("Seven")); System.out.println (map.get ("Восемь")); System.out.println (map.get ("Nine")); System.out.println (map.get ("ten")); System.out.println (map.toString ()); }} класс объект <k, v> {private k key; частное значение V; частная организация <K, V> Pre; частная организация <K, V> Далее; Public Entity (K Key, V значение) {this.key = key; this.value = значение; } public k getKey () {return key; } public void setKey (k key) {this.key = key; } public v getValue () {return Value; } public void setValue (v value) {this.value = value; } Public Entity <K, v> getPre () {return pre; } public void setPre (Entity <K, v> pre) {this.pre = pre; } Public Entity <K, V> getNext () {return Next; } public void setNext (Entity <K, V> Next) {this.Next = Next; }}Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!