سؤال: رقم الطالب من 30 طالبًا في فصل معين هو 20070301-20070330. لقد أخذوا جميعهم دورات برمجة Java وبالنظر إلى درجات جميع الطلاب (يمكن إنشاء أرقام عشوائية ، بمجموعة من 60-100). يرجى كتابة برنامج لطباعة درجات جميع الطلاب في هذا الفصل بالترتيب من منخفض إلى أعلى.
المتطلبات: استخدم القائمة والخريطة والتعيين لتنفيذها بشكل منفصل. تتضمن المعلومات المطبوعة رقم الطالب والاسم والدرجات.
1. استخدم مجموعة القائمة للتنفيذ
استيراد java.util.arraylist ؛ استيراد java.util.collections ؛ استيراد java.util.comparator ؛ استيراد java.util.iterator ؛ استيراد java.util.linkedList ؛ استيراد java.util.treemap ؛ اختبار الفئة العامة test2 {public static void main (string [] args) { / * تم تطبيقه مع ArrayList هنا * * ArrayList <Tudent> al = new ArrayList <Tudent> () ؛ لـ (int i = 20070301 ، j = 10 ؛ i <= 20070330 ؛ i ++ ، j ++) {al.add (new student (i ، (int) (40*math.random ()+60) ، "student"+j)) ؛ } // يتم تحقيق فرز ArrayList بواسطة طريقة SORT () في المجموعات. collections.sort (AL ، New SortBygrade ()) ؛ لـ (الطالب SD: al) system.out.println (SD) ؛ */ LinkedList <Tudent> lt = new LinkedList <Tudent> () ؛ لـ (int i = 20070301 ، j = 10 ؛ i <= 20070330 ؛ i ++ ، j ++) {lt.add (طالب جديد (i ، (int) (40*math.random ()+60) ، "student"+j)) ؛ } // فرز مجموعة القائمة المرتبطة. // القائمة المرتبطة بالإخراج (SD: LT) System.out.println (SD) ؛ }} // student class student {int num ، grade ؛ اسم السلسلة // Constructor Public Student (int num ، int ، اسم السلسلة) {this.num = num ؛ this.name = name ؛ this.grade = grade ؛ } // public string toString () {// system.out.println ("hi") ؛ إرجاع "رقم الطالب:"+this.num+"/t"+"الاسم:"+this.name+""+"SCORE:"+this.grade ؛ }} // قم بإنشاء مجموعة مقارنات SortBygrade لتنفيذ المقارنة <Tudent> {Override Public int (الطالب S1 ، الطالب S2) {if (s1.grade> s2.grad) إرجاع 1 ؛ if (s1.grade <s2.grad) return -1 ؛ if (s1.grade == s2.grad) return s1.name.compareto (s2.name) ؛ العودة 0 ؛ }}تظهر نتيجة الإخراج في الشكل:
ملخص لإطار جمع القائمة:
1. مجموعة القائمة هي في الواقع صفيف ديناميكي ، ويمكن إخراج العناصر مباشرة من خلال حلقة دون التكرار.
2. عند إخراج مجموعة قائمة ، سيتم استدعاء طريقة ToString () التي تخزن الكائن في المجموعة افتراضيًا ، لذلك يجب أن يتم الكتابة عليها في الفصل.
إذا لم يتم تجاوز طريقة ToString ()
لـ (int i = 0 ؛ i <lt.size () ؛ i ++) {student s = lt.get (i) ؛ System.out.println ("رقم الطالب:"+S.Num+"الاسم:"+S.Name+"SCORE:"+S.Grade) ؛ } 3. يتطلب فرز مجموعات القائمة مساعدة من فئة أدوات المجموعات ، أي طريقة Collections.Sort (قائمة ، فئة المقارنة الجديدة ()). لذلك ، تحتاج إلى تخصيص فئة المقارنة وتحديد قواعد المقارنة الخاصة بك.
2. استخدم مجموعة مجموعة للتنفيذ
(1) استخدم Treeset للتنفيذ
حزمة com.package1 ؛ استيراد java.util.*؛ الفئة العامة stuscore {public static void main (string [] args) {treeset <studture> ts = new Treeset <Tudent> (new com ()) ؛ // إضافة عناصر في (int i = 20070301 ، j = 1 ؛ i <= 20070330 ؛ i ++ ، j ++) {ts.add (طالب جديد (i ، "الطالب"+j ، (int) (40*Math.Random ()+60))) ؛ } // حلقة تكرارية لاسترداد ITerator <Tudent> it = ts.iterator () ؛ بينما (it.hasnext ()) {student o1 = it.next () ؛ System.out.println ("رقم الطالب:"+O1.Num+""+"الاسم:"+O1.Name+""+""+"SCORE:"+O1.Grade) ؛ }}} // طالب فئة الطالب {int num ؛ int درجة اسم السلسلة الطالب العام (int num ، اسم سلسلة ، int الصف) {this.num = num ؛ this.name = name ؛ this.grade = grade ؛ }} Class COM تنفذ المقارنة {Override public int (الكائن O1 ، الكائن O2) {student s1 = (student) o1 ؛ الطالب S2 = (الطالب) O2 ؛ if (s1.grade> s2.grad) return 1 ؛ if (s1.grade <s2.grad) return -1 ؛ if (s1.grade == s2.grad) {return new integer (s1.num) .Compareto (عدد صحيح جديد (s2.num)) ؛ } العودة 0 ؛ }} نتيجة الإخراج هي:
معرف الطالب: 20070307 الاسم: زميله 16 الدرجة: 60
معرف الطالب: 20070309 الاسم: زميل 18 الدرجة: 60
معرف الطالب: 20070314 الاسم: زميل 23 الدرجة: 61
معرف الطالب: 20070318 الاسم: زميل 27 الدرجة: 61
معرف الطالب: 20070322 الاسم: زميله 31 الدرجة: 61
معرف الطالب: 20070306 الاسم: زميل 15 الدرجة: 62
معرف الطالب: 20070310 الاسم: زميل 19 درجة: 64
معرف الطالب: 20070302 الاسم: زميل 11 الدرجة: 66
معرف الطالب: 20070308 الاسم: زميل 17 الدرجة: 68
معرف الطالب: 20070321 الاسم: زميل 30 الدرجة: 68
معرف الطالب: 20070330 الاسم: زميل دراسي 39 الدرجة: 69
معرف الطالب: 20070303 الاسم: زميل 12 الدرجة: 70
معرف الطالب: 20070320 الاسم: زميل 29 الدرجة: 70
معرف الطالب: 20070323 الاسم: زميل دراسي 32 الدرجة: 77
معرف الطالب: 20070313 الاسم: زميل 22 الدرجة: 78
معرف الطالب: 20070304 الاسم: زميله 13 الدرجة: 79
معرف الطالب: 20070324 الاسم: زميل دراسي 33 الدرجة: 83
معرف الطالب: 20070326 الاسم: زميل دراسي 35 الدرجة: 84
معرف الطالب: 20070327 الاسم: زميل 36 الدرجة: 85
معرف الطالب: 20070311 الاسم: زميل 20 الدرجة: 88
معرف الطالب: 20070305 الاسم: زميله 14 الدرجة: 89
معرف الطالب: 20070329 الاسم: زميل دراسي 38 الدرجة: 89
معرف الطالب: 20070316 الاسم: زميل 25 الدرجة: 90
معرف الطالب: 20070301 الاسم: زميل 10 الدرجة: 95
معرف الطالب: 20070312 الاسم: زميل 21 الدرجة: 96
معرف الطالب: 20070317 الاسم: زميل 26 الدرجة: 97
معرف الطالب: 20070319 الاسم: زميل 28 الدرجة: 97
معرف الطالب: 20070325 الاسم: زميل دراسي 34 الدرجة: 98
معرف الطالب: 20070315 الاسم: زميله 24 الدرجة: 99
معرف الطالب: 20070328 الاسم: زميل دراسي 37 الدرجة: 99
ملخص Treeset :
1. لا يمكن تكرار العناصر ، ويتم ترتيب Treeset.
2. طريقتان للفرز:
(1) تخصيص فئة المقارنة ، مثل Class com paricementscomparator {} ، قم بتنفيذ طريقة المقارنة (الكائن O1 ، Object O2) ، وتحديد قواعد المقارنة فيه.
(2) جعل العناصر نفسها مقارنة.
الخطوات: أضف العنصر في Treeset لتنفيذ الواجهة المماثلة وتجاوز طريقة المقارنة. هذا الترتيب هو أيضًا الترتيب الطبيعي للعناصر ، أو الترتيب الافتراضي.
الفرق بين الطريقة 1 والطريقة 2:
الطريقتين لها مزايا وعيوب. من السهل استخدام قابلة للمقارنة. طالما أن الكائن الذي ينفذ الواجهة المماثلة يصبح كائنًا قابلاً للمقارنة ، فإنه يتطلب تعديل الرمز المصدر.
ميزة استخدام المقارنة هي أنه لا يتطلب تعديل الكود المصدري ، ولكن تنفيذ المقارنة. عندما يحتاج كائن مخصص إلى مقارنة ، يمكن أن يمرر المقارنة والكائن معًا مقارنة الحجم. في المقارنة ، يمكن للمستخدمين تطبيق المنطق المعقد والعامة بأنفسهم ، حتى يتمكنوا من مطابقة بعض الكائنات البسيطة نسبيًا ، والتي يمكن أن توفر الكثير من العمل المتكرر.
(2) استخدم hashset للتنفيذ
حزمة com.package1 ؛ استيراد java.util.*؛ الطبقة العامة stuscore {public static void main (string [] args) {hashset <Tudtude> hs = new hashset <Tudent> () ؛ // إضافة عناصر في (int i = 20070301 ، j = 1 ؛ i <= 20070330 ؛ i ++ ، j ++) {hs.add (طالب جديد (i ، "الطالب"+j ، (int) (40*Math.Random ()+60))) ؛ } ArrayList <Tudent> li = new ArrayList (HS) ؛ collections.sort (li ، new SortBygrade ()) ؛ لـ (الطالب SS: li) system.out.println (ss) ؛ }} // student class student {int num ؛ int درجة اسم السلسلة الطالب العام (int num ، اسم سلسلة ، int الصف) {this.num = num ؛ this.name = name ؛ this.grade = grade ؛ } السلسلة العامة toString () {//system.out.println("hi ") ؛ إرجاع "رقم الطالب:"+this.num+"/t"+"الاسم:"+this.name+""+"SCORE:"+this.grade ؛ }} class sortbygrade تنفذ المقارنة {Override public int (الكائن O1 ، الكائن O2) {student s1 = (student) o1 ؛ الطالب S2 = (الطالب) O2 ؛ if (s1.grade> s2.grad) return 1 ؛ if (s1.grade <s2.grad) return -1 ؛ // if (s1.grade == s2.grad) return 0 ؛ }} نتيجة الإخراج على النحو التالي:
معرف الطالب: 20070310 الاسم: زميل 19 الدرجة: 60
معرف الطالب: 20070330 الاسم: زميله 39 الدرجة: 62
معرف الطالب: 20070326 الاسم: زميل دراسي 35 الدرجة: 63
معرف الطالب: 20070317 الاسم: زميل 26 الدرجة: 64
معرف الطالب: 20070318 الاسم: زميل 27 الدرجة: 65
معرف الطالب: 20070322 الاسم: زميله 31 الدرجة: 65
معرف الطالب: 20070301 الاسم: زميل 10 الدرجة: 67
معرف الطالب: 20070328 الاسم: زميل دراسي 37 الدرجة: 68
معرف الطالب: 20070304 الاسم: زميل 13 الدرجة: 68
معرف الطالب: 20070319 الاسم: زميل 28 الدرجة: 69
معرف الطالب: 20070313 الاسم: زميل 22 الدرجة: 70
معرف الطالب: 20070303 الاسم: زميل 12 الدرجة: 71
معرف الطالب: 20070312 الاسم: زميل 21 الدرجة: 71
معرف الطالب: 20070329 الاسم: زميل دراسي 38 الدرجة: 72
معرف الطالب: 20070306 الاسم: زميل 15 الدرجة: 72
معرف الطالب: 20070324 الاسم: زميل دراسي 33 الدرجة: 72
معرف الطالب: 20070305 الاسم: زميله 14 الدرجة: 75
معرف الطالب: 20070315 الاسم: زميله 24 الدرجة: 75
معرف الطالب: 20070314 الاسم: زميل 23 الدرجة: 78
معرف الطالب: 20070307 الاسم: زميله 16 الدرجة: 80
معرف الطالب: 20070311 الاسم: زميل 20 الدرجة: 81
معرف الطالب: 20070302 الاسم: زميل 11 الدرجة: 83
معرف الطالب: 20070309 الاسم: زميل 18 الدرجة: 84
معرف الطالب: 20070320 الاسم: زميل 29 الدرجة: 85
معرف الطالب: 20070321 الاسم: زميل 30 الدرجة: 85
معرف الطالب: 20070316 الاسم: زميله 25 الدرجة: 86
معرف الطالب: 20070327 الاسم: زميل 36 الدرجة: 90
معرف الطالب: 20070308 الاسم: زميل 17 الدرجة: 94
معرف الطالب: 20070323 الاسم: زميل دراسي 32 الدرجة: 94
معرف الطالب: 20070325 الاسم: زميل دراسي 34 الدرجة: 95
ملخص Hashset :
1. لا يمكن تكرار العناصر في hashset. إذا تمت إضافتها مرارًا وتكرارًا ، فسيتم عرض واحد فقط.
المبدأ كما يلي:
Hashset: بنية البيانات الأساسية هي جدول التجزئة. إنه معقوش الخيط. خارج المزامنة.
2. كيف تضمن Hashset تفرد العناصر؟
الإجابة: يتم ذلك من خلال طريقتين للعناصر ، Hashcode و Equals.
إذا كانت قيمة hashcode للعنصر هي نفسها ، فسيتم تحديد ما إذا كانت المساواة صحيحة. إذا كانت قيمة Hashcode للعنصر مختلفة ، فلن يتم استدعاء متساوٍ.
3. فرز مجموعة التجزئة عن طريق تحويل مجموعة SET إلى مجموعة قائمة ، وتنفيذ الفرز بمساعدة طريقة Collections.sort ().
3. استخدم Treemap لتنفيذها
حزمة com.package1 ؛ استيراد java.util.comparator ؛ استيراد java.util.iterator ؛ استيراد java.util.set ؛ استيراد java.util.treemap ؛ الفئة العامة testtreemap {public static void main (string [] args) {// 1. إنشاء مجموعة treemap <student ، integer> tm = new Treemap <student ، integer> () ؛ لـ (int i = 20070301 ، j = 10 ؛ i <= 20070330 ؛ i ++ ، j ++) {int drage = (int) (40*math.random ()+60) ؛ // 2. إضافة العنصر tm.put (طالب جديد (الصف ، "الطالب"+J) ، i) ؛ } // 3. اجتياز المجموعة وفرزها ، تم الانتهاء من مجموعة <Tudent> k = tm.keyset () ؛ iterator <Tudent> it = k.iterator () ؛ بينما (it.hasnext ()) {key student = it.next () ؛ عدد صحيح num = tm.get (مفتاح) ؛ System.out.println ("رقم الطالب:"+num+""+"الاسم:"+key.name+""+"SCORE:"+key.grade) ؛ }}} طالب فئة ينفذ قابلة للمقارنة <student> {int grade ؛ اسم السلسلة الطالب العام (int grade ، اسم السلسلة) {this.grade = grade ؛ this.name = name ؛ } Override public int compareto (student o) {if (this.grade> o.grad) return 1 ؛ if (this.grade == o.grade) {// عندما تكون الدرجات متماثلة ، فصفر بالاسم إرجاع this.name.compareto (O.Name) ؛ } العودة -1 ؛ }} نتيجة الإخراج هي:
معرف الطالب: 20070303 الاسم: زميل 12 الدرجة: 61
معرف الطالب: 20070323 الاسم: زميل دراسي 32 الدرجة: 61
معرف الطالب: 20070317 الاسم: زميل 26 الدرجة: 62
معرف الطالب: 20070309 الاسم: زميل 18 الدرجة: 64
معرف الطالب: 20070301 الاسم: زميل 10 الدرجة: 67
معرف الطالب: 20070304 الاسم: زميل دراسي 13 الدرجة: 69
معرف الطالب: 20070322 الاسم: زميله 31 الدرجة: 69
معرف الطالب: 20070328 الاسم: زميل دراسي 37 الدرجة: 70
معرف الطالب: 20070305 الاسم: زميله 14 الدرجة: 71
معرف الطالب: 20070319 الاسم: زميل 28 الدرجة: 73
معرف الطالب: 20070321 الاسم: زميل 30 الدرجة: 74
معرف الطالب: 20070310 الاسم: زميل 19 درجة: 81
معرف الطالب: 20070315 الاسم: زميله 24 الدرجة: 82
معرف الطالب: 20070307 الاسم: زميله 16 الدرجة: 84
معرف الطالب: 20070330 الاسم: زميله 39 الدرجة: 84
معرف الطالب: 20070312 الاسم: زميل 21 الدرجة: 85
معرف الطالب: 20070324 الاسم: زميل دراسي 33 الدرجة: 87
معرف الطالب: 20070306 الاسم: زميل 15 الدرجة: 88
معرف الطالب: 20070308 الاسم: زميل 17 الدرجة: 90
معرف الطالب: 20070327 الاسم: زميل 36 الدرجة: 90
معرف الطالب: 20070318 الاسم: زميل 27 الدرجة: 91
معرف الطالب: 20070316 الاسم: زميله 25 الدرجة: 92
معرف الطالب: 20070320 الاسم: زميل 29 الدرجة: 92
معرف الطالب: 20070314 الاسم: زميل 23 الدرجة: 93
معرف الطالب: 20070313 الاسم: زميل 22 الدرجة: 94
معرف الطالب: 20070302 الاسم: زميل 11 درجة: 95
معرف الطالب: 20070325 الاسم: زميل دراسي 34 الدرجة: 95
معرف الطالب: 20070329 الاسم: زميل دراسي 38 الدرجة: 97
معرف الطالب: 20070326 الاسم: زميل دراسي 35 الدرجة: 98
معرف الطالب: 20070311 الاسم: زميل 20 الدرجة: 99
ملخص Treemap :
1. Treemap يقوم بفرز المفتاح افتراضيًا ، بحيث يمكنك وضع كائنات مخصصة في المفتاح ووضع عدد صحيح يمثل رقم الطالب في القيمة. عند فرز مفتاح ، يمكنك تحديد سمة في كائن مخصص لفرزه.
2. يستخدم مجموعة الخريطة طريقة PUT () لإضافة عناصر.
3. مبدأ أخذ مجموعة الخريطة: قم بتحويل الخريطة إلى مجموعة. الخروج من خلال المكرر. طريقتان لاستخراج مجموعات الخريطة:
(1) SET <k> KEYSET: حفظ جميع المفاتيح في الخريطة في مجموعة SET. لأن المجموعة لها تكرار. يمكن استرداد جميع المفاتيح بطريقة تكرارية وفقًا لطريقة GET. احصل على القيمة المقابلة لكل مفتاح.
(2) SET <map.entry <k ، v >> intplsset: قم بتخزين علاقة التعيين في مجموعة الخريطة في مجموعة المجموعة ، ونوع البيانات لهذه العلاقة هو: map.entry
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.