English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
问题:某班30个学生的学号为20070301-20070330,全部选修了Java程序设计课程,给出所有同学的成绩(可用随机数产生,范围60-100),请编写程序将本班各位同学的成绩按照从低到高排序打印输出。
要求:分别用List、Map、Set来实现,打印的信息包括学号、姓名和成绩。
1、使用List集合来实现
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; import java.util.TreeMap; public class Test2{ public static void main(String[] args){ /* 此处用ArrayList实现 * * ArrayList<Student>al=new ArrayList<Student>(); for(int i=20070301,j=10;i<=20070330;i++,j++) { al.add(new Student(i,(int) (40*Math.random()+60), "同学"+j)); } //ArrayList排序借助Collections中的sort()方法实现。 Collections.sort(al, new Sortbygrade()); for(Student sd:al) System.out.println(sd); */ LinkedList<Student> lt=new LinkedList<Student>(); for(int i=20070301,j=10;i<=20070330;i++,j++) { lt.add(new Student(i,(int) (40*Math.random()+60), "同学"+j)); } //对链表排序 Collections.sort(lt, new Sortbygrade()); //输出链表 for(Student sd:lt) System.out.println(sd); } } //Studienklasse class Student{ int num,grade; String name; //构造函数 public Student(int num,int grade,String name){ this.num=num; this.name=name; this.grade=grade; } //此处必须覆写 public String toString(){ // System.out.println("hi"); return "Studentennummer:"+this.num+"\t"+"Name:"+this.name+" "+"成绩:"+this.grade; } } //创建一个比较器类 class Sortbygrade implements Comparator<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); return 0; } }
输出结果如图:
对List集合框架的总结:
1、List集合实际上是一个动态数组,元素可以直接通过for循环取出,而不需要迭代。
2、Bei der Ausgabe der List-Kollektion wird standardmäßig die toString() -Methode des im Kollektion gespeicherten Objekts aufgerufen, daher muss in der Klasse eine Überschreibung vorgenommen werden.
Wenn die toString() -Methode nicht überschrieben wird, muss
for(int i=0;i<lt.size();i++) { Student s=lt.get(i); System.out.println("学号:"+s.num+" Name:",+s.name+" Noten:",+s.grade); }
3、Die Sortierung der List-Kollektionen erfordert die Verwendung des Collections-Tools, d.h. Collections.Sort(list, new Comparator-Klasse())-Methode. Daher muss eine benutzerdefinierte Comparator-Klasse definiert und Ihre eigenen Vergleichsregeln definiert werden.
2、Verwenden Sie Set-Kollektionen, um dies zu erreichen
(1)Verwenden Sie TreeSet, um dies zu erreichen
package com.package1; um dies zu erreichen*; import java.util. public static void main(String[] args) { TreeSet<Student> ts=new TreeSet<Student>(new Com()); //HashSet<Student> hs=new HashSet<Student>(); for(int i=20070301,j=1;i<=20070330;i++,j++) { ts.add(new Student(i,"Schüler"+j,(int) (40*Math.random()+60))); } //Iteratives Durchlaufen, um herauszunehmen Iterator<Student> it=ts.iterator(); while(it.hasNext()) { Student o1=it.next(); System.out.println("学号:"+o1.num+" ",+"姓名:"+o1.name+" ",+" ",+"Noten:",+o1.grade); } } } //Studienklasse class Student { int num; int grade; String name; public Student(int num, String name, int grade) { this.num=num; this.name=name; this.grade=grade; } } class Com implements Comparator { @Override public int compare(Object o1, Object o2) { Student s1=(Student) o1; Student s2=(Student) o2; if(s1.grade>s2.grade) return 1; if(s1.grade<s2.grade) return -1; if(s1.grade==s2.grade) { return new Integer(s1.num).compareTo(new Integer(s2.num)); } return 0; } }
Ausgabeergebnis:
Schulnummer:20070307 Name: Schüler16 Noten:60
Schulnummer:20070309 Name: Schüler18 Noten:60
Schulnummer:20070314 Name: Schüler23 Noten:61
Schulnummer:20070318 Name: Schüler27 Noten:61
Schulnummer:20070322 Name: Schüler31 Noten:61
Schulnummer:20070306 Name: Schüler15 Noten:62
Schulnummer:20070310 Name: Schüler19 Noten:64
Schulnummer:20070302 Name: Schüler11 Noten:66
Schulnummer:20070308 Name: Schüler17 Noten:68
Schulnummer:20070321 Name: Schüler30 Noten:68
Schulnummer:20070330 Name: Schüler39 Noten:69
Schulnummer:20070303 Name: Schüler12 Noten:70
Schulnummer:20070320 Name: Schüler29 Noten:70
Schulnummer:20070323 Name: Schüler32 Noten:77
Schulnummer:20070313 Name: Schüler22 Noten:78
Schulnummer:20070304 Name: Schüler13 Noten:79
Schulnummer:20070324 Name: Schüler33 Noten:83
Schulnummer:20070326 Name: Schüler35 Noten:84
Schulnummer:20070327 Name: Schüler36 Noten:85
Schulnummer:20070311 Name: Schüler20 Noten:88
Schulnummer:20070305 Name: Schüler14 Noten:89
Schulnummer:20070329 Name: Schüler38 Noten:89
Schulnummer:20070316 Name: Schüler25 Noten:90
Schulnummer:20070301 Name: Schüler10 Noten:95
Schulnummer:20070312 Name: Schüler21 Noten:96
Schulnummer:20070317 Name: Schüler26 Noten:97
Schulnummer:20070319 Name: Schüler28 Noten:97
Schulnummer:20070325 Name: Schüler34 Noten:98
Schulnummer:20070315 Name: Schüler24 Noten:99
Schulnummer:20070328 Name: Schüler37 Noten:99
zuTreeSetZusammenfassung:
1、Die Elemente dürfen nicht dupliziert werden, und TreeSet ist sortiert.
2、Zwei Sortiermethoden:
(1)Definieren Sie eine benutzerdefinierte Comparator-Klasse, z.B. class Com implements Comparator{ } , implementieren Sie compare(Object o1, Object o2)Definieren Sie die Vergleichsregeln in der Methode.
(2)Geben Sie den Elementen selbst eine Vergleichbarkeit.
Schritte: Implementieren Sie das Comparable-Interface für die in den TreeSet hinzugefügten Elemente und überschreiben Sie die compareTo-Methode. Diese Reihenfolge ist auch die natürliche Reihenfolge der Elemente, oder auch Standardreihenfolge genannt.
Methode1und Methode2Unterschiede:
Beide Methoden haben ihre Vor- und Nachteile. Die Verwendung von Comparable ist einfach, ein Objekt, das das Comparable-Interface implementiert, wird direkt zu einem vergleichbaren Objekt, aber es muss die Quellcode geändert werden.
(2Der Vorteil der Verwendung von Comparator ist, dass es nicht notwendig ist, die Quelldatei zu ändern, sondern eine weitere Comparator zu implementieren. Wenn ein benutzerdefiniertes Objekt verglichen werden muss, wird der Comparator zusammen mit dem Objekt übergeben, um die Größenverhältnisse zu bestimmen. Und der Benutzer kann im Comparator selbst komplexe und allgemeine Logiken implementieren, um einfache Objekte zu passen. Dies kann viele wiederholte Arbeiten sparen.}HashSet)使用
package com.package1; um dies zu erreichen*; import java.util. public static void main(String[] args) { public class StuScore { //HashSet<Student> hs=new HashSet<Student>(); for(int i=20070301,j=1;i<=20070330;i++,j++) { hs.add(new Student(i,"Schüler"+j,(int) (40*Math.random()+60))); } ArrayList<Student>li=new ArrayList(hs); Collections.sort(li, new Sortbygrade()); for(Student ss:li) System.out.println(ss); } } //Studienklasse class Student { int num; int grade; String 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"); return "Studentennummer:"+this.num+"\t"+"Name:"+this.name +" "+"成绩:"+this.grade; } } class Sortbygrade implements Comparator{ @Override public int compare(Object o1, Object o2) { Student s1=(Student) o1; Student s2=(Student) o2; if(s1.grade>s2.grade) return 1; if(s1.grade<s2.grade) return -1; // if(s1.grade==s2.grade) return 0; } }
Das Ausgabergebnis ist wie folgt:
Schulnummer:20070310 Name: Schüler19 Noten:60
Schulnummer:20070330 Name: Schüler39 Noten:62
Schulnummer:20070326 Name: Schüler35 Noten:63
Schulnummer:20070317 Name: Schüler26 Noten:64
Schulnummer:20070318 Name: Schüler27 Noten:65
Schulnummer:20070322 Name: Schüler31 Noten:65
Schulnummer:20070301 Name: Schüler10 Noten:67
Schulnummer:20070328 Name: Schüler37 Noten:68
Schulnummer:20070304 Name: Schüler13 Noten:68
Schulnummer:20070319 Name: Schüler28 Noten:69
Schulnummer:20070313 Name: Schüler22 Noten:70
Schulnummer:20070303 Name: Schüler12 Noten:71
Schulnummer:20070312 Name: Schüler21 Noten:71
Schulnummer:20070329 Name: Schüler38 Noten:72
Schulnummer:20070306 Name: Schüler15 Noten:72
Schulnummer:20070324 Name: Schüler33 Noten:72
Schulnummer:20070305 Name: Schüler14 Noten:75
Schulnummer:20070315 Name: Schüler24 Noten:75
Schulnummer:20070314 Name: Schüler23 Noten:78
Schulnummer:20070307 Name: Schüler16 Noten:80
Schulnummer:20070311 Name: Schüler20 Noten:81
Schulnummer:20070302 Name: Schüler11 Noten:83
Schulnummer:20070309 Name: Schüler18 Noten:84
Schulnummer:20070320 Name: Schüler29 Noten:85
Schulnummer:20070321 Name: Schüler30 Noten:85
Schulnummer:20070316 Name: Schüler25 Noten:86
Schulnummer:20070327 Name: Schüler36 Noten:90
Schulnummer:20070308 Name: Schüler17 Noten:94
Schulnummer:20070323 Name: Schüler32 Noten:94
Schulnummer:20070325 Name: Schüler34 Noten:95
zuHashSetZusammenfassung:
1Elemente in HashSet dürfen nicht dupliziert werden. Fügt man ein dupliziertes Element hinzu, wird nur eins angezeigt.
Der Prinzip ist wie folgt:
HashSet: Die unterliegende Datenstruktur ist eine Hash-Tabelle. Sie ist nicht threadsicher. Nicht synchronisiert.
2Wie gewährleistet HashSet die Einzigartigkeit der Elemente?
答:是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。
3、对HashSet的排序,通过将Set集合转化为List集合,借助Collections.Sort( )方法实现排序。
3、使用TreeMap来实现
package com.package1; import java.util.Comparator; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TestTreeMap { public static void main(String[] args) { //1.创建集合 TreeMap<Student,Integer> tm=new TreeMap<Student,Integer>(); for(int i=20070301,j=10;i<=20070330;i++,j++) { int grade=(int) (40*Math.random()+60); //2、往集合对象中添加元素 tm.put(new Student(grade,"同学"+j),i); } //3.遍历集合 ,排序完成 Set<Student> k=tm.keySet(); Iterator<Student> it=k.iterator(); while(it.hasNext()){ Student key=it.next(); Integer num=tm.get(key); System.out.println("学号:"+num+" "+"姓名:"+key.name+" "+"成绩:"+key.grade); } } } class Student implements Comparable<Student>{ int grade; String name; public Student(int grade,String name){ this.grade =grade; this.name=name; } @Override public int compareTo(Student o) { if(this.grade>o.grade) return 1; if(this.grade==o.grade) { //Wenn die Noten gleich sind, wird nach dem Namen sortiert return this.name.compareTo(o.name); } return -1; } }
Ausgabeergebnis:
Schulnummer:20070303 Name: Schüler12 Noten:61
Schulnummer:20070323 Name: Schüler32 Noten:61
Schulnummer:20070317 Name: Schüler26 Noten:62
Schulnummer:20070309 Name: Schüler18 Noten:64
Schulnummer:20070301 Name: Schüler10 Noten:67
Schulnummer:20070304 Name: Schüler13 Noten:69
Schulnummer:20070322 Name: Schüler31 Noten:69
Schulnummer:20070328 Name: Schüler37 Noten:70
Schulnummer:20070305 Name: Schüler14 Noten:71
Schulnummer:20070319 Name: Schüler28 Noten:73
Schulnummer:20070321 Name: Schüler30 Noten:74
Schulnummer:20070310 Name: Schüler19 Noten:81
Schulnummer:20070315 Name: Schüler24 Noten:82
Schulnummer:20070307 Name: Schüler16 Noten:84
Schulnummer:20070330 Name: Schüler39 Noten:84
Schulnummer:20070312 Name: Schüler21 Noten:85
Schulnummer:20070324 Name: Schüler33 Noten:87
Schulnummer:20070306 Name: Schüler15 Noten:88
Schulnummer:20070308 Name: Schüler17 Noten:90
Schulnummer:20070327 Name: Schüler36 Noten:90
Schulnummer:20070318 Name: Schüler27 Noten:91
Schulnummer:20070316 Name: Schüler25 Noten:92
Schulnummer:20070320 Name: Schüler29 Noten:92
Schulnummer:20070314 Name: Schüler23 Noten:93
Schulnummer:20070313 Name: Schüler22 Noten:94
Schulnummer:20070302 Name: Schüler11 Noten:95
Schulnummer:20070325 Name: Schüler34 Noten:95
Schulnummer:20070329 Name: Schüler38 Noten:97
Schulnummer:20070326 Name: Schüler35 Noten:98
Schulnummer:20070311 Name: Schüler20 Noten:99
zuTreeMapZusammenfassung:
1、TreeMap sortiert die Schlüssel standardmäßig, daher können benutzerdefinierte Objekte in die Schlüssel eingefügt werden, und die Integer, die die Schulnummer darstellen, werden in die Werte eingefügt. Beim Sortieren der Schlüssel kann eine bestimmte Eigenschaft des benutzerdefinierten Objekts angegeben werden, um zu sortieren.
2、Fügen Sie Elemente mit dem put()-Method hinzufügen.
3、Abfrageprinzip des Map-Sets: Das Map-Speicher wird in ein Set-Speicher umgewandelt und dann über den Iterator ausgelesen. Zwei Abfragearten des Map-Speichers:
(1)Set<k> keySet:Speichern Sie alle Schlüssel des Maps in das Set-Speicher. Da Set einen Iterator hat, können alle Schlüssel auf Iterationsweise ausgelesen werden, und die Werte jeder Schlüssel werden über die get-Methode abgerufen.
(2)Set<Map.Entry<k,v>> entrySet:Die Abbildungsverhältnisse des Map-Sets werden in das Set-Set gespeichert, und der Datentyp dieses Verhältnisses ist: Map.Entry
Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und dass Sie die呐喊教程 mehr unterstützen.
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte, hat den Inhalt nicht manuell bearbeitet und übernimmt keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige urheberrechtliche Inhalte finden, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (bei der E-Mail-Übermittlung bitte # durch @ ersetzen) zur Meldung von Missbrauch und zur Bereitstellung relevanter Beweise. Bei nachgewiesener Urheberrechtsverletzung wird diese Website die fraglichen Inhalte sofort löschen.