ArrayList dan Hashmap
Penyimpanan ArrayList adalah array.
Penyimpanan Hashmap adalah array ditambah daftar tertaut.
MyArrayList berikut dan MyHashMap tidak digunakan dalam pekerjaan yang sebenarnya. Hal yang paling mungkin digunakan adalah wawancara dan mencari pekerjaan dan membodohi orang lain. Meskipun tidak berguna di tempat kerja, itu tidak berarti itu tidak berguna. Ini dapat membantu kita memahami prinsip implementasinya. Setelah implementasi selesai, kami akan dengan hati -hati memeriksa kode sumber di JDK dan kami akan mengetahui di mana orang lain dapat belajar dalam implementasinya.
Myarraylist
kelas publik myArraylist <E> {private int kapasitas = 10; Ukuran int pribadi = 0; nilai e [] private = null; @SuppressWarnings ("Uncecked") public myArrayList () {values = (e []) objek baru [kapasitas]; } @SuppressWarnings ("Uncecked") public myArrayList (int kapasitas) {this.capacity = kapasitas; nilai = (e []) objek baru [this.capacity]; } public void put (e e) {if (e == null) {lempar runimeException baru ("Nilai tidak boleh null."); } if (size> = kapasitas) {enerargecapacity (); } nilai [ukuran] = e; ukuran ++; } public e get (int index) {if (index> = size) {lempar runimeException baru ("indeks:" + index + "keluar dari band."); } mengembalikan nilai [indeks]; } public void Remove (int index) {if (index> = size) {lempar runimeException baru ("indeks:" + index + "keluar dari band."); } untuk (int i = index; i <size - 1; i ++) {values [i] = values [i+1]; } nilai [ukuran - 1] = null; ukuran--; } @SuppressWarnings ("Uncecked") Private Void Enlargecapacity () {kapasitas = kapasitas * 2; E [] tmpValues = (e []) objek baru [kapasitas]; System.ArrayCopy (Nilai, 0, TmpValues, 0, Size); nilai = TMPVALUES; } public String ToString () {StringBuilder SB = New StringBuilder (); SB.Append ("["); untuk (int i = 0; i <size; i ++) {sb.append (nilai [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 = myArrayList baru <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
kelas publik myhashmap <k, v> {// kapasitas inisialisasi kapasitas int pribadi = 10; // Entitas Total Ukuran int pribadi = 0; entitas pribadi <k, v> [] entitas = null; @SuppressWarnings ("Uncecked") public myHashMap () {entitas = entitas baru [kapasitas]; } public void put (key k, nilai v) {if (key == null) {lempar runtimeException baru ("Kunci adalah null"); } rehash (); Entitas <k, v> newEntity = entitas baru <k, v> (kunci, nilai); put (newentity, this.entities, this.capacity); } private void put (entitas <k, v> newEntity, entitas <k, v> [] entitas, kapasitas int) {int index = newEntity.getKey (). hashCode () % kapasitas; Entitas <k, v> entitas = entitas [indeks]; Entitas <k, v> firstEntity = entitas [indeks]; if (entitas == null) {entitas [index] = newEntity; ukuran ++; } else {if (newEntity.getKey (). Equals (entity.getKey ())) {// Temukan tombol yang sama untuk entitas pertama, jika temukan kemudian ganti nilai lama ke nilai baru newEntity.setNext (entity.getNext ()); newEntity.setPre (entity.getpre ()); if (entity.getNext ()! = null) {entity.getNext (). setPre (newEntity); } entitas [indeks] = newEntity; } else if (entity.getNext ()! = null) {while (entity.getNext ()! = null) {// Temukan tombol yang sama untuk semua entitas berikutnya, jika temukan kemudian ganti nilai lama ke nilai baru entitas = entity.getNext (); if (newEntity.getKey (). Equals (entity.getKey ()))) {newEntity.setPre (entity.getPre ()); newEntity.setNext (entity.getNext ()); if (entity.getNext ()! = null) {entity.getNext (). setPre (newEntity); } entitas [indeks] = newEntity; kembali; }} // Tidak dapat menemukan kunci yang sama, lalu masukkan entitas baru di header newEntity.setNext (firstEntity); newEntity.setPre (firstEntity.getPre ()); firstEntity.setpre (NewEntity); entitas [indeks] = newEntity; ukuran ++; } else {// tidak dapat menemukan kunci yang sama, lalu masukkan entitas baru di head newEntity.setNext (firstEntity); firstEntity.setpre (NewEntity); entitas [indeks] = newEntity; ukuran ++; }}} public v get (k key) {if (key == null) {lempar runimeException baru ("Kunci adalah null"); } int index = key.hashCode () % kapasitas; Entitas <k, v> entitas = entitas [indeks]; if (entitas! = null) {if (entity.getKey (). Equals (key)) {return entity.getValue (); } else {entity = entity.getNext (); while (entitas! = null) {if (entity.getKey (). Equals (key)) {return entity.getValue (); } entity = entity.getNext (); }}} return null; } public void Remove (K key) {if (key == null) {lempar runtimeException baru ("Kunci adalah null"); } int index = key.hashCode () % kapasitas; Entitas <k, v> entitas = entitas [indeks]; if (entitas! = null) {if (entity.getKey (). Equals (key)) {if (entity.getNext ()! = null) {// hapus entitas entitas pertama.getNext (). setPre (entity.getPre ()); entitas [indeks] = entitas.getNext (); entitas = null; } else {// kosongkan entitas indeks ini [index] = null; } ukuran--; } 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 ()); entitas = null; } else {// lepaskan entitas entitas yang ditemukan.getPre (). setNext (null); entitas = null; } ukuran--; kembali; } entity = entity.getNext (); }}}} public String ToString () {StringBuilder SB = New StringBuilder (); untuk (int i = 0; i <kapasitas; i ++) {sb.append ("index ="). append (i) .append ("["); hasentity boolean = false; Entitas <k, v> entitas = entitas [i]; if (entitas! = null) {hasentity = true; } while (entitas! = null) {sb.append ("["). append (entity.getKey ()). append ("="). append (entity.getValue ()). append ("]"). append (","); entitas = entity.getNext (); } if (hasEntity) {sb.deleteCharat (sb.length () - 1); } sb.append ("]/n"); } return sb.toString (); } / ** * Strategi Re-Hash Sederhana, jika ukurannya lebih besar dari kapasitas, maka lakukan tindakan kembali * / private void rehash () {if (size> = kapasitas) {int newCapacity = kapasitas * 2; @Suppresswarnings ("Uncecked") entitas <k, v> [] newEntities = entitas baru [newcapacity]; untuk (int i = 0; i <kapasitas; i ++) {entitas <k, v> entitas = entitas [i]; while (entitas! = null) {put (entitas, newentities, newcapacity); entitas = entity.getNext (); }} this.capacity = newCapacity; this.entities = newentities; }} public static void main (string [] args) {myhashmap <string, string> peta = myhashmap baru <string, string> (); peta.put ("satu", "1"); peta.put ("dua", "2"); peta.put ("tiga", "3"); peta.put ("empat", "4"); peta.put ("lima", "5"); peta.put ("enam", "6"); peta.put ("tujuh", "7"); peta.put ("delapan", "8"); peta.put ("sembilan", "9"); peta.put ("sepuluh", "10"); System.out.println (Map.get ("One")); System.out.println (map.get ("dua")); System.out.println (map.get ("tiga")); System.out.println (map.get ("empat")); System.out.println (Map.get ("Five")); System.out.println (Map.get ("Six")); System.out.println (Map.get ("Seven")); System.out.println (Map.get ("Eight")); System.out.println (Map.get ("Nine")); System.out.println (Map.get ("Ten")); System.out.println (MAP.ToString ()); peta.remove ("sembilan"); peta.remove ("tiga"); System.out.println (Map.get ("One")); System.out.println (map.get ("dua")); System.out.println (map.get ("tiga")); System.out.println (map.get ("empat")); System.out.println (Map.get ("Five")); System.out.println (Map.get ("Six")); System.out.println (Map.get ("Seven")); System.out.println (Map.get ("Eight")); System.out.println (Map.get ("Nine")); System.out.println (Map.get ("Ten")); System.out.println (MAP.ToString ()); }} entitas kelas <k, v> {private k key; nilai V pribadi; entitas pribadi <k, v> pra; entitas pribadi <k, v> selanjutnya; Entitas publik (Key k, nilai v) {this.key = key; this.value = nilai; } public k getKey () {Key return; } public void setKey (K key) {this.key = key; } public v getValue () {nilai pengembalian; } public void setValue (nilai v) {this.value = nilai; } entitas publik <k, v> getPre () {return pre; } public void setPre (entitas <k, v> pre) {this.pre = pre; } entitas publik <k, v> getNext () {return next; } public void setNext (entitas <k, v> next) {this.next = next; }}Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!