Question : Il y a 30 étudiants dans une classe dont les numéros d'étudiant sont 20070301-20070330. Ils ont tous suivi le cours de programmation Java. Les scores de tous les étudiants sont donnés (des nombres aléatoires peuvent être générés, allant de 60 à 100). écrire un programme auquel attribuer cette classe. Les scores de chaque élève sont imprimés par ordre décroissant.
Exigences : utilisez la liste, la carte et l'ensemble pour implémenter respectivement. Les informations imprimées incluent le numéro de l'élève, le nom et les notes.
1. Utilisez la collection List pour implémenter
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); } } //学生类 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 "学号:"+this.num+"\t"+"姓名:"+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; } }
Le résultat de sortie est tel qu'indiqué dans la figure :
Résumé de la liste framework de collection :
1. La collection List est en fait un tableau dynamique, et les éléments peuvent être extraits directement via une boucle for sans itération.
2. Lors de la sortie d'une collection List, la méthode toString() des objets stockés dans la collection sera appelée par défaut, elle doit donc être remplacée dans la classe.
Si vous ne remplacez pas la méthode toString(), vous devez utiliser
for(int i=0;i<lt.size();i++) { Student s=lt.get(i); System.out.println("学号:"+s.num+" 姓名:"+s.name+" 成绩:"+s.grade); }
3. Le tri de la collection List nécessite l'aide de la classe outil Collections, qui est la méthode Collections.Sort(list, new ComparatorClass()). Par conséquent, vous devez personnaliser une classe de comparaison et définir vos propres règles de comparaison.
2. Utilisez la collection Set pour implémenter
(1) Utilisez TreeSet pour implémenter
package com.package1; import java.util.*; public class StuScore { public static void main(String[] args) { TreeSet<Student> ts=new TreeSet<Student>(new Com()); //添加元素进去 for(int i=20070301,j=1;i<=20070330;i++,j++) { ts.add(new Student(i,"同学"+j,(int) (40*Math.random()+60))); } //迭代循环取出 Iterator<Student> it=ts.iterator(); while(it.hasNext()) { Student o1=it.next(); System.out.println("学号:"+o1.num+" "+"姓名:"+o1.name+" "+" "+"成绩:"+o1.grade); } } } //学生类 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; } }
Le résultat de sortie est :
ID d'étudiant : 20070307 Nom : Camarade de classe 16 Score : 60
ID d'étudiant : 20070309 Nom : Camarade de classe 18 Score : 60
ID d'étudiant : 20070314 Nom : Camarade de classe 23 Score : 61
ID d'étudiant : 20070318 Nom : Camarade de classe 27 Score : 61
ID d'étudiant : 20070322 Nom : Camarade de classe 31 Score : 61
ID d'étudiant : 20070306 Nom : Camarade de classe 15 Score : 62
ID d'étudiant : 20070310 Nom : Camarade de classe 19 Score : 64
ID d'étudiant : 20070302 Nom : Camarade de classe 11 Score : 66
ID d'étudiant : 20070308 Nom : Camarade de classe 17 Score : 68
ID d'étudiant : 20070321 Nom : Camarade de classe 30 Score : 68
ID d'étudiant : 20070330 Nom : Camarade de classe 39 Score : 69
ID d'étudiant : 20070303 Nom : Camarade de classe 12 Score : 70
ID d'étudiant : 20070320 Nom : Camarade de classe 29 Score : 70
ID d'étudiant : 20070323 Nom : Camarade de classe 32 Score : 77
ID d'étudiant : 20070313 Nom : Camarade de classe 22 Score : 78
ID d'étudiant : 20070304 Nom : Camarade de classe 13 Score : 79
ID d'étudiant : 20070324 Nom : Camarade de classe 33 Score : 83
Étudiant ID :20070326 Nom : camarade de classe 35 Score : 84
ID d'étudiant : 20070327 Nom : camarade de classe 36 Score : 85
ID d'étudiant : 20070311 Nom : camarade de classe 20 Score : 88
ID d'étudiant : 20070305 Nom : camarade de classe 14 Score : 89
ID d'étudiant : 20070329 Nom : Camarade de classe 38 Score : 89
ID d'étudiant : 20070316 Nom : Camarade de classe 25 Score : 90
ID d'étudiant : 20070301 Nom : Camarade de classe 10 Score : 95
ID d'étudiant : 20070312 Nom : camarade de classe 21 Score : 96
ID d'étudiant : 20070317 Nom : camarade de classe 26 Score : 97
ID d'étudiant : 20070319 Nom : camarade de classe 28 Score : 97
ID d'étudiant : 20070325 Nom : camarade de classe 34 Score : 98
ID d'étudiant : 20070315 Nom : Camarade de classe 24 Score : 99
ID d'étudiant : 20070328 Nom : Camarade de classe 37 Score : 99
Résumé de TreeSet :
1 Les éléments ne peuvent pas être répétés et TreeSet. est en règle.
2. Deux méthodes de tri :
(1) Personnalisez une classe de comparaison, telle que la classe Com ImplementsComparator{ }, implémentez la méthode compare(Object o1, Object o2) et définissez-y des règles de comparaison.
(2) Rendre les éléments eux-mêmes comparatifs.
Étape : implémentez l'interface Comparable pour les éléments ajoutés au TreeSet et remplacez la méthode compareTo. Cet ordre est aussi l’ordre naturel des éléments, ou appelé ordre par défaut.
La différence entre la méthode 1 et la méthode 2 :
Les deux méthodes ont leurs propres avantages et inconvénients. L'utilisation de Comparable est simple tant que l'objet qui implémente l'interface Comparable devient directement. un objet comparable, mais le code source doit être modifié.
L'avantage d'utiliser Comparator est que vous n'avez pas besoin de modifier le code source, mais d'implémenter un comparateur Lorsqu'un objet personnalisé doit être comparé, transmettez simplement le comparateur et l'objet ensemble. La taille peut être comparée et dans Comparator, les utilisateurs peuvent implémenter eux-mêmes une logique complexe et universelle, afin qu'elle puisse correspondre à certains objets relativement simples, ce qui peut économiser beaucoup de travail répétitif.
(2) Utilisez HashSet pour implémenter
package com.package1; import java.util.*; public class StuScore { public static void main(String[] args) { HashSet<Student> hs=new HashSet<Student>(); //添加元素进去 for(int i=20070301,j=1;i<=20070330;i++,j++) { hs.add(new Student(i,"同学"+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); } } //学生类 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 "学号:"+this.num+"\t"+"姓名:"+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; } }
输出结果如下:
学号: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值相同,才会判断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) { //当成绩相同时,按照姓名排序 return this.name.compareTo(o.name); } return -1; } }
输出结果为:
ID d'étudiant : 20070303 Nom : camarade de classe 12 Score : 61
ID d'étudiant : 20070323 Nom : camarade de classe 32 Score : 61
ID d'étudiant : 20070317 Nom : camarade de classe 26 Score : 62
ID d'étudiant : 20070309 nom : Camarade de classe 18 Score : 64
ID d'étudiant : 20070301 Nom : Camarade de classe 10 Score : 67
ID d'étudiant : 20070304 Nom : Camarade de classe 13 Score : 69
ID d'étudiant : 20070322 Nom : Camarade de classe 31 Score : 69
ID d'étudiant : 20070328 Nom : camarade de classe 37 Score : 70
ID d'étudiant : 20070305 Nom : camarade de classe 14 Score : 71
ID d'étudiant : 20070319 Nom : camarade de classe 28 Score : 73
ID d'étudiant : 20070321 Nom : camarade de classe 30 Score : 74
ID d'étudiant : 20070310 Nom : Camarade de classe 19 Score : 81
ID d'étudiant : 20070315 Nom : Camarade de classe 24 Score : 82
ID d'étudiant : 20070307 Nom : Camarade de classe 16 Score : 84
Étudiant Numéro : 20070330 Nom : Camarade de classe 39 Score : 84
ID d'étudiant : 20070312 Nom : Camarade de classe 21 Score : 85
ID d'étudiant : 20070324 Nom : Camarade de classe 33 Score : 87
ID d'étudiant : 20070306 Nom : Camarade de classe 15 Réalisations :88
ID d'étudiant : 20070308 Nom : camarade de classe 17 Score : 90
ID d'étudiant : 20070327 Nom : camarade de classe 36 Score : 90
ID d'étudiant : 20070318 Nom : camarade de classe 27 Score : 91
ID d'étudiant : 20070316 Nom : camarade de classe 25 Score : 92
ID d'étudiant : 20070320 Nom : camarade de classe 29 Score : 92
ID d'étudiant : 20070314 Nom : camarade de classe 23 Score : 93
ID d'étudiant : 20070313 Nom : camarade de classe 22 Score :94
ID d'étudiant : 20070302 Nom : Camarade de classe 11 Score : 95
ID d'étudiant : 20070325 Nom : Camarade de classe 34 Score : 95
ID d'étudiant : 20070329 Nom : Camarade de classe 38 Score : 97
ID d'étudiant : 20070326 nom : Classmate 35 Score : 98
ID d'étudiant : 20070311 Nom : Classmate 20 Score : 99
Résumé de TreeMap :
1. TreeMap trie les clés par défaut, afin que des objets personnalisés puissent être placés. Entrez la clé. et mettez l’entier représentant le numéro d’étudiant dans la valeur. Lors du tri par clé, vous pouvez spécifier une propriété dans l'objet personnalisé à trier.
2. La collection Map utilise la méthode put() pour ajouter des éléments.
3. Le principe de l'extraction de la collection Map : convertir la collection de cartes en une collection d'ensembles. Retirez-le via l'itérateur. Deux façons de récupérer l'ensemble de cartes :
(1) Set
(2) Set
Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. J'espère également que tout le monde soutiendra le site Web PHP chinois.
Pour plus de questions sur le framework de collection Java et diverses idées de résolution de problèmes, veuillez faire attention au site Web PHP chinois pour les articles connexes !