Frage: Die Schülerzahl von 30 Schülern in einer bestimmten Klasse ist 20070301-20070330. Alle von ihnen haben Java-Programmierkurse belegt und die Noten aller Schüler angegeben (können mit zufälligen Zahlen mit einem Bereich von 60 bis 100 generiert werden). Bitte schreiben Sie ein Programm, um die Noten aller Schüler in dieser Klasse von niedrig bis hoch zu drucken.
Anforderungen: Verwenden Sie Liste, Karte und setzen Sie sie separat ein. Die gedruckten Informationen enthalten Studentennummer, Name und Noten.
1. Verwenden Sie die Listensammlung zum Implementieren
Import Java.util.ArrayList; Import Java.util.Collections; Java.util.comParator importieren; Import Java.util.iterator; import Java.util.linkedList; Import Java.util.Treemap; public class test2 {public static void main (String [] args) { / * mit arrayList implementiert * * arrayList <Studenten> al = new ArrayList <Student> (); für (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {al.add (neuer Schüler (i, (int) (40*math.random ()+60), "Student"+J)); } // ArrayList -Sortierung wird durch die Sort () -Methode in Sammlungen erreicht. Collectionss.sort (Al, New SortBygrade ()); für (Student SD: Al) system.out.println (SD); */ LinkedList <Student> lt = new LinkedList <Studenten> (); für (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {lt.add (neuer Schüler (i, (int) (40*math.random ()+60), "Student"+J)); } // Sortieren Sie die verknüpften Liste collections.sort (lt, new sortBygrade ()); // Ausgabe verlinkte Liste für (Student SD: LT) system.out.println (SD); }} // Schülerklasse Schüler {int num, grade; Zeichenfolge Name; // Constructor Public Student (int num, int grade, string name) {this.num = num; this.name = name; this.grade = grade; } // public String toString () {// system.out.println ("hi"); Rückgabe "Schülernummer:"+this.num+"/t"+"Name:"+this.name+""+"Score:"+this.grade; }} // Erstellen Sie eine Komparatorklasse SortBygrade implementiert Compue <Student> {@Override public int Compare (Student S1, Student S2) {if (s1.grade> s2.grade) return 1; if (s1.grade <s2.grade) return -1; if (s1.grade == s2.grade) return s1.name.comPareto (S2.Name); Rückkehr 0; }}Das Ausgangsergebnis ist in der Abbildung dargestellt:
Zusammenfassung des Listensammlung Framework:
1. List Collection ist eigentlich ein dynamisches Array, und Elemente können direkt über eine für Schleife ohne Iteration herausgenommen werden.
2. Bei der Ausgabe einer Listensammlung wird die Methode toString (), die das Objekt in der Sammlung speichert, standardmäßig aufgerufen, sodass es in der Klasse überschrieben werden muss.
Wenn die Methode toString () nicht überschrieben ist, muss sie verwendet werden
für (int i = 0; i <lt.size (); i ++) {student s = lt.get (i); System.out.println ("Studentnummer:"+s.num+"Name"+s.name+"Score:"+S.grade); } 3. Die Sortierung von Listensammlungen erfordert die Hilfe der Sammlungs -Toolklasse, dh der Methode für Sammlungen.Sort (Liste, neue Komparatorklasse ()). Daher müssen Sie eine Komparatorklasse anpassen und Ihre eigenen Vergleichsregeln definieren.
2. Verwenden Sie die SET -Sammlung zum Implementieren
(1) Verwenden Sie Treeset, um implementiert zu werden
Paket com.package1; import Java.util.*; public class stuscore {public static void main (String [] args) {treeset <Studenten> ts = new treeset <Stud Student> (new com ()); // Elemente hinzufügen in für (int i = 20070301, j = 1; i <= 20070330; i ++, j ++) {ts.add (neuer Schüler (i, "Student"+J, (int) (40*Math.Random ()+60)); } // iterative Schleife zum Abrufen von Iterator <Student> iT = ts.Ireator (); while (it.hasnext ()) {student o1 = it.next (); System.out.println ("Schülernummer:"+o1.num+""+"Name:"+O1.Name+""+""+"Score:"+O1.grade); }}} // Schülerklasse Schüler {int num; int Grade; Zeichenfolge Name; public student (int num, string name, int grade) {this.num = num; this.name = name; this.grade = grade; }} Klasse com implementiert den vergleicher {@Override public int Compare (Objekt O1, Objekt O2) {Student S1 = (Student) O1; Schüler S2 = (Schüler) O2; if (s1.grade> s2.grade) return 1; if (s1.grade <s2.grade) return -1; if (s1.grade == S2.grade) {Neue Integer zurückgeben (S1.Num) .Compareto (New Integer (S2.Num)); } return 0; }} Das Ausgangsergebnis ist:
Student ID: 20070307 Name: Klassenkamerad 16 Punktzahl: 60
Student ID: 20070309 Name: Klassenkamerad 18 Punktzahl: 60
Student ID: 20070314 Name: Klassenkamerad 23 Punktzahl: 61
Student ID: 20070318 Name: Klassenkamerad 27 Punktzahl: 61
Schüler -ID: 20070322 Name: Klassenkamerad 31 Punktzahl: 61
Student ID: 20070306 Name: Klassenkamerad 15 Punktzahl: 62
Student ID: 20070310 Name: Klassenkamerad 19 Punktzahl: 64
Student ID: 20070302 Name: Klassenkamerad 11 Punktzahl: 66
Student ID: 20070308 Name: Klassenkamerad 17 Punktzahl: 68
Schüler -ID: 20070321 Name: Klassenkamerad 30 Punktzahl: 68
Schüler -ID: 20070330 Name: Klassenkamerad 39 Punktzahl: 69
Student ID: 20070303 Name: Klassenkamerad 12 Punktzahl: 70
Schüler -ID: 20070320 Name: Klassenkamerad 29 Punktzahl: 70
Schüler -ID: 20070323 Name: Klassenkamerad 32 Punktzahl: 77
Schüler -ID: 20070313 Name: Klassenkamerad 22 Punktzahl: 78
Student ID: 20070304 Name: Klassenkamerad 13 Punktzahl: 79
Schüler -ID: 20070324 Name: Klassenkamerad 33 Punktzahl: 83
Schüler -ID: 20070326 Name: Klassenkamerad 35 Punktzahl: 84
Schüler -ID: 20070327 Name: Klassenkamerad 36 Punktzahl: 85
Schüler -ID: 20070311 Name: Klassenkamerad 20 Punktzahl: 88
Student ID: 20070305 Name: Klassenkamerad 14 Punktzahl: 89
Schüler -ID: 20070329 Name: Klassenkamerad 38 Punktzahl: 89
Schüler -ID: 20070316 Name: Klassenkamerad 25 Punktzahl: 90
Schüler -ID: 20070301 Name: Klassenkamerad 10 Punktzahl: 95
Schüler -ID: 20070312 Name: Klassenkamerad 21 Punktzahl: 96
Schüler -ID: 20070317 Name: Klassenkamerad 26 Punktzahl: 97
Student ID: 20070319 Name: Klassenkamerad 28 Punktzahl: 97
Schüler -ID: 20070325 Name: Klassenkamerad 34 Punktzahl: 98
Schüler -ID: 20070315 Name: Klassenkamerad 24 Punktzahl: 99
Schüler -ID: 20070328 Name: Klassenkamerad 37 Punktzahl: 99
Zusammenfassung von Treeset :
1. Elemente können nicht wiederholt werden und Treeset wird bestellt.
2. Zwei Sortiermethoden:
(1) Passen Sie eine Komparatorklasse an, wie z. B. die Klasse com implementsComparator {}, implementieren Sie die Vergleichsmethode (Objekt O1, Objekt O2) und definieren Sie die darin enthaltenen Vergleichsregeln.
(2) die Elemente selbst vergleichbar machen.
Schritte: Fügen Sie das Element in Treeset hinzu, um die vergleichbare Schnittstelle zu implementieren und die Vergleichsmethode zu überschreiben. Diese Reihenfolge ist auch die natürliche Reihenfolge der Elemente oder die Standardreihenfolge.
Der Unterschied zwischen Methode 1 und Methode 2:
Die beiden Methoden haben ihre eigenen Vor- und Nachteile. Es ist einfach vergleichbar zu verwenden. Solange das Objekt, das die vergleichbare Schnittstelle implementiert, zu einem vergleichbaren Objekt wird, muss der Quellcode geändert werden.
Der Vorteil der Verwendung von Comparator besteht darin, dass es nicht erforderlich ist, den Quellcode zu ändern, sondern einen Komparator. Wenn ein benutzerdefiniertes Objekt verglichen werden muss, kann das Übergeben des Vergleichs und des Objekts die Größe vergleichen. Im Vergleicher können Benutzer eine komplexe und allgemeine Logik selbst implementieren, damit sie mit einigen relativ einfachen Objekten übereinstimmen können, die viele sich wiederholende Arbeiten sparen können.
(2) Hashset verwenden, um implementiert zu werden
Paket com.package1; import Java.util.*; public class stuscore {public static void main (String [] args) {Hashset <Studenten> hs = new Hashset <Studenten> (); // Elemente in für (int i = 20070301, j = 1; i <= 20070330; i ++, j ++) {hs.add (neuer Schüler (I, "Student"+J, (int) (40*Math.Random ()+60)) hinzufügen; } ArrayList <Studenten> li = new ArrayList (HS); Collections.sort (li, New SortBygrade ()); für (Student SS: li) system.out.println (SS); }} // Schülerklasse Schüler {int num; int Grade; Zeichenfolge Name; public student (int num, string name, int grade) {this.num = num; this.name = name; this.grade = grade; } public String toString () {//system.out.println("hi "); Rückgabe "Schülernummer:"+this.num+"/t"+"Name:"+this.name+""+"Score:"+this.grade; }} class SortBygrad implementiert den vergleicher {@Override public int Compare (Objekt O1, Objekt O2) {Student S1 = (Student) O1; Schüler S2 = (Schüler) O2; if (s1.grade> s2.grade) return 1; if (s1.grade <s2.grade) return -1; // if (s1.grade == s2.grade) return 0; }} Das Ausgabeergebnis ist wie folgt:
Student ID: 20070310 Name: Klassenkamerad 19 Punktzahl: 60
Student ID: 20070330 Name: Klassenkamerad 39 Punktzahl: 62
Schüler -ID: 20070326 Name: Klassenkamerad 35 Punktzahl: 63
Schüler -ID: 20070317 Name: Klassenkamerad 26 Punktzahl: 64
Schüler -ID: 20070318 Name: Klassenkamerad 27 Punktzahl: 65
Schüler -ID: 20070322 Name: Klassenkamerad 31 Punktzahl: 65
Schüler -ID: 20070301 Name: Klassenkamerad 10 Punktzahl: 67
Schüler -ID: 20070328 Name: Klassenkamerad 37 Punktzahl: 68
Student ID: 20070304 Name: Klassenkamerad 13 Punktzahl: 68
Schüler ID: 20070319 Name: Klassenkamerad 28 Punktzahl: 69
Schüler -ID: 20070313 Name: Klassenkamerad 22 Punktzahl: 70
Student ID: 20070303 Name: Klassenkamerad 12 Punktzahl: 71
Schüler -ID: 20070312 Name: Klassenkamerad 21 Punktzahl: 71
Schüler -ID: 20070329 Name: Klassenkamerad 38 Punktzahl: 72
Schüler -ID: 20070306 Name: Klassenkamerad 15 Punktzahl: 72
Schüler -ID: 20070324 Name: Klassenkamerad 33 Punktzahl: 72
Schüler -ID: 20070305 Name: Klassenkamerad 14 Punktzahl: 75
Student ID: 20070315 Name: Klassenkamerad 24 Punktzahl: 75
Schüler -ID: 20070314 Name: Klassenkamerad 23 Punktzahl: 78
Student ID: 20070307 Name: Klassenkamerad 16 Punktzahl: 80
Schüler -ID: 20070311 Name: Klassenkamerad 20 Punktzahl: 81
Student ID: 20070302 Name: Klassenkamerad 11 Punktzahl: 83
Student ID: 20070309 Name: Klassenkamerad 18 Punktzahl: 84
Student ID: 20070320 Name: Klassenkamerad 29 Punktzahl: 85
Schüler -ID: 20070321 Name: Klassenkamerad 30 Punktzahl: 85
Student ID: 20070316 Name: Klassenkamerad 25 Punktzahl: 86
Schüler -ID: 20070327 Name: Klassenkamerad 36 Punktzahl: 90
Student ID: 20070308 Name: Klassenkamerad 17 Punktzahl: 94
Schüler -ID: 20070323 Name: Klassenkamerad 32 Punktzahl: 94
Schüler -ID: 20070325 Name: Klassenkamerad 34 Punktzahl: 95
Zusammenfassung von Hashset :
1. Die Elemente im Hashset können nicht wiederholt werden. Wenn sie wiederholt hinzugefügt werden, wird nur einer angezeigt.
Das Prinzip ist wie folgt:
Hashset: Die zugrunde liegende Datenstruktur ist eine Hash -Tabelle. Es ist Thread-Unsicherheit. Aus Synchronisation.
2. Wie gewährleistet Hashset die Einzigartigkeit von Elementen?
Antwort: Es geschieht durch zwei Methoden von Elementen, Hashcode und gleichermaßen.
Wenn der HashCode -Wert des Elements gleich ist, wird festgestellt, ob Equals wahr ist. Wenn der HashCode -Wert des Elements unterschiedlich ist, wird gleich nicht aufgerufen.
3. Sortieren Sie den Hashset, indem Sie die SET -Sammlung in eine Listensammlung konvertieren und die Sortierung mit Hilfe der Sammlung (SORT () implementieren.
3.. Verwenden Sie Treemap, um es umzusetzen
Paket com.package1; Java.util.comParator importieren; Import Java.util.iterator; Java.util.set importieren; Import Java.util.Treemap; public class testTreemap {public static void main (String [] args) {// 1. Erstellen Sie eine Sammlung Treemap <Student, Integer> TM = New Treemap <Student, Integer> (); für (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {int grade = (int) (40*math.random ()+60); // 2. Element tm.put hinzufügen (neuer Schüler (Note, "Student"+J), i); } // 3. Überqueren Sie das Set und sortieren Sie es ist fertiggestellt <Student> k = tm.keyset (); Iterator <Student> iT = k.iterator (); while (it.hasnext ()) {student key = it.next (); Ganzzahl num = tm.get (Schlüssel); System.out.println ("Schülernummer:"+num+""+"Name:"+key.name+"" "+" Score: "+key.grade); }}} Klasse Schüler implementiert vergleichbar <Studenten> {int grade; Zeichenfolge Name; public student (int grade, string name) {this.gra = grade; this.name = name; } @Override public int vergleicheto (student o) {if (this.grade> o.grade) return 1; if (this.grad == o.grade) {// Wenn die Noten gleich sind, sortieren Sie nach Namen zurück. Name.comPareto (O.Name); } return -1; }} Das Ausgangsergebnis ist:
Student ID: 20070303 Name: Klassenkamerad 12 Punktzahl: 61
Schüler -ID: 20070323 Name: Klassenkamerad 32 Punktzahl: 61
Schüler -ID: 20070317 Name: Klassenkamerad 26 Punktzahl: 62
Student ID: 20070309 Name: Klassenkamerad 18 Punktzahl: 64
Schüler -ID: 20070301 Name: Klassenkamerad 10 Punktzahl: 67
Student ID: 20070304 Name: Klassenkamerad 13 Punktzahl: 69
Schüler -ID: 20070322 Name: Klassenkamerad 31 Punktzahl: 69
Schüler -ID: 20070328 Name: Klassenkamerad 37 Punktzahl: 70
Student ID: 20070305 Name: Klassenkamerad 14 Punktzahl: 71
Schüler -ID: 20070319 Name: Klassenkamerad 28 Punktzahl: 73
Schüler -ID: 20070321 Name: Klassenkamerad 30 Punktzahl: 74
Student ID: 20070310 Name: Klassenkamerad 19 Punktzahl: 81
Schüler -ID: 20070315 Name: Klassenkamerad 24 Punktzahl: 82
Student ID: 20070307 Name: Klassenkamerad 16 Punktzahl: 84
Student ID: 20070330 Name: Klassenkamerad 39 Punktzahl: 84
Student ID: 20070312 Name: Klassenkamerad 21 Punktzahl: 85
Schüler -ID: 20070324 Name: Klassenkamerad 33 Punktzahl: 87
Student ID: 20070306 Name: Klassenkamerad 15 Punktzahl: 88
Student ID: 20070308 Name: Klassenkamerad 17 Punktzahl: 90
Schüler -ID: 20070327 Name: Klassenkamerad 36 Punktzahl: 90
Schüler -ID: 20070318 Name: Klassenkamerad 27 Punktzahl: 91
Schüler -ID: 20070316 Name: Klassenkamerad 25 Punktzahl: 92
Student ID: 20070320 Name: Klassenkamerad 29 Punktzahl: 92
Schüler -ID: 20070314 Name: Klassenkamerad 23 Punktzahl: 93
Schüler -ID: 20070313 Name: Klassenkamerad 22 Punktzahl: 94
Student ID: 20070302 Name: Klassenkamerad 11 Punktzahl: 95
Schüler -ID: 20070325 Name: Klassenkamerad 34 Punktzahl: 95
Schüler -ID: 20070329 Name: Klassenkamerad 38 Punktzahl: 97
Schüler -ID: 20070326 Name: Klassenkamerad 35 Punktzahl: 98
Schüler -ID: 20070311 Name: Klassenkamerad 20 Punktzahl: 99
Zusammenfassung von Treemap :
1. Treemap sortiert den Schlüssel standardmäßig, sodass Sie benutzerdefinierte Objekte in den Schlüssel einfügen und die Ganzzahl, die die Schülernummer darstellt, in den Wert einlegen. Wenn Sie einen Schlüssel sortieren, können Sie ein Attribut in einem benutzerdefinierten Objekt angeben, um es zu sortieren.
2. Die Kartensammlung verwendet die Put () -Methode, um Elemente hinzuzufügen.
3.. Das Prinzip der Ausnahme von Kartensatz: Konvertieren Sie den MAP -Set in einen Satz. Steigen Sie durch den Iterator. Zwei Möglichkeiten, Kartensammlungen zu extrahieren:
(1) SET <K> Schlüsselset: Speichern Sie alle Schlüssel in der Karte in der SET -Sammlung. Weil Set Iteratoren hat. Alle Schlüssel können nach der GET -Methode iterativ abgerufen werden. Holen Sie sich den Wert, der jedem Schlüssel entspricht.
.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.