arraylist และ hashmap
การจัดเก็บของ ArrayList เป็นอาร์เรย์
ที่เก็บของ HashMap เป็นอาร์เรย์บวกรายการที่เชื่อมโยง
myarraylist และ myhashmap ต่อไปนี้ไม่ได้ใช้ในการทำงานจริง สิ่งที่เป็นไปได้มากที่สุดคือการสัมภาษณ์และหางานทำและหลอกคนอื่น แม้ว่ามันจะไม่มีประโยชน์ในการทำงาน แต่ก็ไม่ได้หมายความว่ามันไร้ประโยชน์ มันสามารถช่วยให้เราเข้าใจหลักการดำเนินการของพวกเขา หลังจากการดำเนินการเสร็จสมบูรณ์เราจะตรวจสอบซอร์สโค้ดอย่างรอบคอบใน JDK และเราจะทราบว่าคนอื่นสามารถเรียนรู้ได้อย่างไรในการใช้งานของพวกเขา
myarraylist
ชั้นเรียนสาธารณะ myarraylist <E> {ความจุ int ส่วนตัว = 10; ขนาด int ส่วนตัว = 0; ส่วนตัว e [] ค่า = null; @suppresswarnings ("ไม่ได้ตรวจสอบ") public myarraylist () {value = (e []) วัตถุใหม่ [ความจุ]; } @suppresswarnings ("ไม่ได้ตรวจสอบ") myarrayList สาธารณะ (ความจุ int) {this.capacity = ความจุ; ค่า = (e []) วัตถุใหม่ [this.capacity]; } โมฆะสาธารณะใส่ (e e) {if (e == null) {โยน runtimeException ใหม่ ("ค่าไม่ควรเป็นโมฆะ"); } if (size> = ความจุ) {EnlargeCapacity (); } ค่า [ขนาด] = e; ขนาด ++; } สาธารณะ e get (int index) {if (index> = size) {โยน runtimeException ใหม่ ("ดัชนี:" + ดัชนี + "ออกจากวงดนตรี"); } ค่าคืนค่า [ดัชนี]; } โมฆะสาธารณะลบ (INT ดัชนี) {ถ้า (ดัชนี> = ขนาด) {โยน runtimeException ใหม่ ("ดัชนี:" + ดัชนี + "ออกจากแถบ"); } สำหรับ (int i = index; i <size - 1; i ++) {ค่า [i] = ค่า [i+1]; } ค่า [ขนาด - 1] = null; ขนาด--; } @suppresswarnings ("ไม่ได้ตรวจสอบ") โมฆะส่วนตัวขยายความสามารถ () {ความจุ = ความจุ * 2; e [] tmpvalues = (e []) วัตถุใหม่ [ความจุ]; System.arrayCopy (ค่า, 0, tmpvalues, 0, ขนาด); ค่า = tmpvalues; } public String toString () {StringBuilder sb = new StringBuilder (); sb.append ("["); สำหรับ (int i = 0; i <size; i ++) {sb.append (ค่า [i]). ผนวก (","); } if (ขนาด> 0) {sb.deletecharat (sb.length () - 1); } sb.append ("]"); ส่งคืน sb.toString (); } / ** * @param args * / โมฆะคงที่สาธารณะหลัก (สตริง [] args) {myarrayList <String> myList = ใหม่ 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> {// ความสามารถในการเริ่มต้นความจุ INT ส่วนตัว = 10; // รวมเอนทิตีรวมขนาด INT = 0; เอนทิตีเอกชน <k, v> [] เอนทิตี = null; @suppresswarnings ("ไม่ได้ตรวจสอบ") สาธารณะ myHashMap () {entities = นิติบุคคลใหม่ [ความจุ]; } โมฆะสาธารณะใส่ (k key, v value) {ถ้า (key == null) {โยน runtimeException ใหม่ ("คีย์คือ null"); } rehash (); เอนทิตี <k, v> newEntity = นิวเคลียสใหม่ <k, v> (คีย์, ค่า); ใส่ (NewEntity, this.entities, this.capacity); } โมฆะส่วนตัวใส่ (เอนทิตี <k, v> newEntity, เอนทิตี <k, v> [] เอนทิตี, ความจุ int) {int index = newEntity.getKey (). hashCode () % กำลังการผลิต; เอนทิตี <k, v> เอนทิตี = เอนทิตี [ดัชนี]; เอนทิตี <k, v> firstEntity = เอนทิตี [ดัชนี]; if (entity == null) {entities [index] = newEntity; ขนาด ++; } else {if (newEntity.getKey (). Equals (entity.getKey ())) {// ค้นหาคีย์เดียวกันสำหรับเอนทิตีแรกหากค้นหาแล้วแทนที่ค่าเก่าเป็นค่าใหม่ใหม่ newEntity.setpre (entity.getPre ()); if (entity.getNext ()! = null) {entity.getNext (). setPre (NewEntity); } เอนทิตี [ดัชนี] = NewEntity; } else ถ้า (entity.getNext ()! = null) {ในขณะที่ (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); } เอนทิตี [ดัชนี] = NewEntity; กลับ; }} // ไม่พบคีย์เดียวกันจากนั้นแทรกเอนทิตีใหม่ที่ส่วนหัวใหม่ SetNext (FirstEntity); newEntity.setpre (FirstEntity.getPre ()); FirstEntity.SetPre (NewEntity); เอนทิตี [ดัชนี] = NewEntity; ขนาด ++; } else {// ไม่สามารถค้นหาคีย์เดียวกันได้จากนั้นใส่เอนทิตีใหม่ใน head Newentity.setNext (FirstEntity); FirstEntity.SetPre (NewEntity); เอนทิตี [ดัชนี] = NewEntity; ขนาด ++; }}} สาธารณะ v get (k key) {if (key == null) {โยน runtimeException ใหม่ ("คีย์คือ null"); } int index = key.hashCode () % กำลังการผลิต; เอนทิตี <k, v> เอนทิตี = เอนทิตี [ดัชนี]; if (entity! = null) {ถ้า (entity.getKey (). เท่ากับ (คีย์)) {return entity.getValue (); } else {entity = entity.getNext (); ในขณะที่ (เอนทิตี! = null) {ถ้า (entity.getKey (). เท่ากับ (คีย์)) {return entity.getValue (); } entity = entity.getNext (); }}} return null; } โมฆะสาธารณะลบ (k key) {if (key == null) {โยน runtimeException ใหม่ ("คีย์คือ null"); } int index = key.hashCode () % กำลังการผลิต; เอนทิตี <k, v> เอนทิตี = เอนทิตี [ดัชนี]; if (เอนทิตี! = null) {ถ้า (entity.getKey (). เท่ากับ (คีย์)) {ถ้า (entity.getNext ()! = null) {// ลบเอนทิตีเอนทิตีแรก getNext (). setPre (entity.getPre ()); เอนทิตี [ดัชนี] = entity.getNext (); เอนทิตี = null; } else {// ล้างข้อมูลดัชนีนี้ [ดัชนี] = null; } ขนาด--; } else {entity = entity.getNext (); ในขณะที่ (เอนทิตี! = null) {ถ้า (entity.getKey (). เท่ากับ (คีย์)) {ถ้า (entity.getNext ()! = null) {entity.getPre (). setNext (entity.getNext ()); Entity.getNext (). setPre (entity.getPre ()); เอนทิตี = null; } else {// ปล่อยเอนทิตีเอนทิตีที่ค้นพบ getPre (). setNext (null); เอนทิตี = null; } ขนาด--; กลับ; } entity = entity.getNext (); }}}} public String toString () {StringBuilder sb = new StringBuilder (); สำหรับ (int i = 0; i <ความจุ; i ++) {sb.append ("index ="). ผนวก (i) .append ("["); บูลีน hasentity = false; เอนทิตี <k, v> เอนทิตี = เอนทิตี [i]; if (เอนทิตี! = null) {hasentity = true; } ในขณะที่ (เอนทิตี! = null) {sb.append ("["). ผนวก (entity.getKey ()). ผนวก ("="). ผนวก (entity.getValue ()). ภาคผนวก ("]"). ผนวก (","); entity = entity.getNext (); } if (hasentity) {sb.deletecharat (sb.length () - 1); } sb.append ("]/n"); } return sb.toString (); } / ** * กลยุทธ์การแฮชอย่างง่ายหากขนาดใหญ่กว่าความจุจากนั้นทำการแฮชใหม่อีกครั้ง * / โมฆะส่วนตัว rehash () {ถ้า (ขนาด> = ความจุ) {int newCapacity = ความจุ * 2; @suppresswarnings ("ไม่ได้ตรวจสอบ") เอนทิตี <k, v> [] newEntities = นิติบุคคลใหม่ [newcapacity]; สำหรับ (int i = 0; i <ความจุ; i ++) {เอนทิตี <k, v> เอนทิตี = เอนทิตี [i]; ในขณะที่ (เอนทิตี! = null) {ใส่ (เอนทิตี, NewEntities, newCapacity); entity = entity.getNext (); }} this.capacity = newCapacity; this.entities = NewEntities; }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {myHashMap <สตริง, สตริง> map = ใหม่ myHashMap <สตริง, สตริง> (); map.put ("หนึ่ง", "1"); map.put ("สอง", "2"); map.put ("สาม", "3"); map.put ("สี่", "4"); map.put ("ห้า", "5"); map.put ("หก", "6"); map.put ("เจ็ด", "7"); map.put ("แปด", "8"); map.put ("เก้า", "9"); map.put ("สิบ", "10"); System.out.println (map.get ("หนึ่ง")); System.out.println (map.get ("สอง")); System.out.println (map.get ("สาม")); System.out.println (map.get ("สี่")); System.out.println (map.get ("ห้า")); System.out.println (map.get ("หก")); System.out.println (map.get ("เจ็ด")); System.out.println (map.get ("แปด")); System.out.println (map.get ("เก้า")); System.out.println (map.get ("สิบ")); System.out.println (map.toString ()); MAP.REMOVE ("เก้า"); map.remove ("สาม"); System.out.println (map.get ("หนึ่ง")); System.out.println (map.get ("สอง")); System.out.println (map.get ("สาม")); System.out.println (map.get ("สี่")); System.out.println (map.get ("ห้า")); System.out.println (map.get ("หก")); System.out.println (map.get ("เจ็ด")); System.out.println (map.get ("แปด")); System.out.println (map.get ("เก้า")); System.out.println (map.get ("สิบ")); System.out.println (map.toString ()); }} คลาสเอนทิตี <k, v> {คีย์ส่วนตัว k; มูลค่า V ส่วนตัว; หน่วยงานเอกชน <k, v> pre; หน่วยงานเอกชน <k, v> ถัดไป; เอนทิตีสาธารณะ (คีย์ k, ค่า V) {this.key = key; this.value = ค่า; } public k getKey () {คีย์ return; } โมฆะสาธารณะ setKey (k key) {this.key = key; } สาธารณะ v getValue () {ค่าคืน; } โมฆะสาธารณะ setValue (ค่า V) {this.value = value; } เอนทิตีสาธารณะ <k, v> getpre () {return pre; } โมฆะสาธารณะ setpre (เอนทิตี <k, v> pre) {this.pre = pre; } เอนทิตีสาธารณะ <k, v> getNext () {return next; } โมฆะสาธารณะ setNext (เอนทิตี <k, v> ถัดไป) {this.next = ถัดไป; -ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!