Arraylist و Hashmap
تخزين ArrayList هو صفيف.
تخزين HashMap هو صفيف بالإضافة إلى قائمة مرتبطة.
لا يتم استخدام MyArrayList التالية و myhashmap في العمل الفعلي. الشيء الأكثر ترجيحًا في استخدامه هو مقابلة وإيجاد وظيفة وخرق الآخرين. على الرغم من أنه ليس مفيدًا في العمل ، إلا أنه لا يعني أنه عديم الفائدة. يمكن أن تساعدنا على فهم مبادئ التنفيذ الخاصة بهم. بعد اكتمال التنفيذ ، سنقوم بفحص الرمز المصدري في JDK بعناية وسنكتشف أين يمكن للأشخاص الآخرين التعلم في تنفيذها.
MyArrayList
الطبقة العامة myArrayList <e> {private int cute = 10 ؛ حجم int الخاص = 0 ؛ قيم e [] الخاصة = فارغة ؛ suppressWarnings ("غير محدد") public myArrayList () {values = (e []) كائن جديد [cuty] ؛ } suppressWarnings ("Unchecked") public myArrayList (int cappary) {this.capacity = cute ؛ القيم = (e []) كائن جديد [this.capacity] ؛ } public void put (e e) {if (e == null) {thraw new RunTimeException ("يجب ألا تكون القيمة فارغة.") ؛ } if (size> = court) {enlargeCapacity () ؛ } القيم [size] = e ؛ حجم ++ ؛ } public e get (int index) {if (index> = size) {رمي new runTimeException ("الفهرس:" + index + "خارج النطاق.") ؛ } قيم الإرجاع [الفهرس] ؛ } public void remove (int index) {if (index> = size) {رمي new RunTimeException ("الفهرس:" + index + "خارج النطاق.") ؛ } لـ (int i = index ؛ i <size - 1 ؛ i ++) {stable [i] = stable [i+1] ؛ } القيم [الحجم - 1] = فارغة ؛ مقاس--؛ } suppressWarnings ("unchecked") private void enlargeCapacity () {cumper = cumper * 2 ؛ e [] tmpvalues = (e []) كائن جديد [السعة] ؛ System.arrayCopy (القيم ، 0 ، tmpvalues ، 0 ، الحجم) ؛ القيم = TMPValues ؛ } السلسلة العامة toString () {StringBuilder sb = new StringBuilder () ؛ SB.Append ("[") ؛ لـ (int i = 0 ؛ i <size ؛ i ++) {sb.append (القيم [i]). إلحاق ("،") ؛ } if (size> 0) {sb.deletecharat (sb.length () - 1) ؛ } sb.append ("]") ؛ إرجاع sb.tostring () ؛ } / ** * param args * / public static void main (string [] args) {myArrayList <string> myRist = 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 ؛ // إجمالي الكيانات الحجم الباحث = 0 ؛ الكيان الخاص <k ، v> [] كيانات = فارغة ؛ suppressWarnings ("غير محدد") public myHashMap () {intities = yternice [caption] ؛ } public void put (k key ، v value) {if (key == null) {throw new RunTimeException ("The Key is null") ؛ } إعادة صياغة () ؛ الكيان <k ، v> newentity = كيان جديد <k ، v> (المفتاح ، القيمة) ؛ ضع (newentity ، this.entities ، this.cappacity) ؛ } Private void put (untity <k ، v> newentity ، untity <k ، v> [] intities ، int courn) {int index = newentity.getKey (). hashcode () ٪ ؛ الكيان <k ، v> الكيان = الكيانات [الفهرس] ؛ الكيان <k ، v> firstentity = الكيانات [الفهرس] ؛ if (estity == null) {intities [index] = newentity ؛ حجم ++ ؛ } آخر {if (newentity.getKey (). يساوي (entity.getKey ())) {// ابحث عن نفس المفتاح للكيان الأول ، إذا ابحث عن القيمة القديمة بالقيمة الجديدة الجديدة. newentity.setpre (entity.getPre ()) ؛ if (entity.getNext ()! = null) {entity.getNext (). setPre (newentity) ؛ } الكيانات [الفهرس] = newentity ؛ } آخر إذا (entity.getNext ()! = null) {بينما (entity.getNext ()! = null) {// ابحث عن نفس المفتاح لجميع الكيان التالي ، إذا كان قد ابحث عن القيمة القديمة إلى القيمة الجديدة = 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 ؛ يعود؛ }} // لا يمكن العثور على نفس المفتاح ، ثم أدخل الكيان الجديد في header newentity.setNext (firstentity) ؛ newentity.setpre (firstentity.getPre ()) ؛ firstentity.setpre (newentity) ؛ الكيانات [الفهرس] = Newentity ؛ حجم ++ ؛ } آخر {// لا يمكن العثور على نفس المفتاح ، ثم ضع الكيان الجديد في رأس newentity.setNext (firstentity) ؛ firstentity.setpre (newentity) ؛ الكيانات [الفهرس] = Newentity ؛ حجم ++ ؛ }}} public v get (k key) {if (key == null) {رمي new runTimeException ("المفتاح هو null") ؛ } int index = key.hashcode () ٪ الكيان <k ، v> الكيان = الكيانات [الفهرس] ؛ if (ectity! = null) {if (entity.getKey (). equals (key)) {return entity.getValue () ؛ } آخر {entity = entity.getNext () ؛ بينما (الكيان! = null) {if (entity.getKey (). يساوي (مفتاح)) {return entity.getValue () ؛ } الكيان = entity.getNext () ؛ }}} return null ؛ } public void remove (k key) {if (key == null) {رمي new runTimeException ("المفتاح هو null") ؛ } int index = key.hashcode () ٪ الكيان <k ، v> الكيان = الكيانات [الفهرس] ؛ if (ectity! = null) {if (entity.getKey (). equals (key)) {if (entity.getNext ()! = null) {// قم بإزالة Entity.getNext (). الكيانات [الفهرس] = entity.getNext () ؛ الكيان = فارغ ؛ } else {// فارغ كيانات الفهرس [index] = null ؛ } مقاس--؛ } آخر {entity = entity.getNext () ؛ بينما (Entity! = null) {if (entity.getKey (). يساوي (مفتاح)) {if (entity.getNext ()! = null) {entity.getPre (). setNext (entity.getNext ()) ؛ entity.getNext (). setPre (entity.getPre ()) ؛ الكيان = فارغ ؛ } else {// refer the estity estity.getPre (). setNext (null) ؛ الكيان = فارغ ؛ } مقاس--؛ يعود؛ } الكيان = entity.getNext () ؛ }}}} السلسلة العامة toString () {StringBuilder sb = new StringBuilder () ؛ لـ (int i = 0 ؛ i <cappy ؛ i ++) {sb.append ("index ="). append (i) .Append ("[") ؛ الحجارة المنطقية = كاذبة ؛ الكيان <k ، v> الكيان = الكيانات [i] ؛ إذا (الكيان! = null) {hasentity = true ؛ } بينما (الكيان! = null) {sb.append ("[[") الكيان = entity.getNext () ؛ } if (hasentity) {sb.deletecharat (sb.length () - 1) ؛ } sb.append ("]/n") ؛ } return sb.toString () ؛ } / ** * استراتيجية إعادة التثبيط البسيطة ، إذا كان الحجم أكبر من السعة ، فقم بإعادة تجهيز الإجراء * / private void refres () {if (size> = cappy) {int newCapacity = cute * 2 ؛ @suppressWarnings ("غير محدد") الكيان <k ، v> [] newentities = كيان جديد [newCapacity] ؛ لـ (int i = 0 ؛ i <cappy ؛ i ++) {intity <k ، v> estity = intities [i] ؛ بينما (الكيان! = null) {put (الكيان ، newentities ، newCapacity) ؛ الكيان = entity.getNext () ؛ }} this.capacity = newCapacity ؛ هذا. }} public static void main (string [] args) {myHashMap <string ، string> map = new MyHashMap <string ، string> () ؛ map.put ("واحد" ، "1") ؛ map.put ("اثنين" ، "2") ؛ map.put ("ثلاثة" ، "3") ؛ map.put ("أربعة" ، "4") ؛ map.put ("Five" ، "5") ؛ map.put ("Six" ، "6") ؛ map.put ("Seven" ، "7") ؛ map.put ("ثمانية" ، "8") ؛ map.put ("تسعة" ، "9") ؛ map.put ("ten" ، "10") ؛ System.out.println (map.get ("one")) ؛ System.out.println (map.get ("two")) ؛ System.out.println (map.get ("three")) ؛ System.out.println (map.get ("Four")) ؛ System.out.println (map.get ("Five")) ؛ System.out.println (map.get ("Six")) ؛ System.out.println (map.get ("Seven")) ؛ system.out.println (map.get ("eio")) ؛ System.out.println (map.get ("Nine")) ؛ system.out.println (map.get ("ten")) ؛ System.out.println (map.toString ()) ؛ map.remove ("تسعة") ؛ map.remove ("ثلاثة") ؛ System.out.println (map.get ("one")) ؛ System.out.println (map.get ("two")) ؛ System.out.println (map.get ("three")) ؛ System.out.println (map.get ("Four")) ؛ System.out.println (map.get ("Five")) ؛ System.out.println (map.get ("Six")) ؛ System.out.println (map.get ("Seven")) ؛ system.out.println (map.get ("eio")) ؛ 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> التالي ؛ الكيان العام (مفتاح k ، v value) {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 ؛ } الكيان العام <k ، v> getPre () {return pre ؛ } public void setpre (untity <k ، v> pre) {this.pre = pre ؛ } الكيان العام <k ، v> getNext () {return next ؛ } public void setNext (الكيان <k ، v> التالي) {this.next = next ؛ }}شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!