English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Problème :Une classe30 est le numéro d'étudiant de20070301-20070330, tous les élèves ont suivi le cours de conception de programmes Java, donnez les notes de tous les élèves (générées par des nombres aléatoires, avec une plage60-100),Veuillez écrire un programme pour trier et imprimer les notes des élèves de la classe par ordre croissant.
Exigence :Réaliser avec List, Map, Set, et imprimer les informations, y compris le numéro d'étudiant, le nom et la note.
1、Utiliser la collection List pour réaliser
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){ /* Ici, ArrayList est utilisé * * 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), "Étudiant"+j)); } //Le tri de l'ArrayList est réalisé à l'aide de la méthode sort() de Collections. 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), "Étudiant"+j)); } //Tri de la liste Collections.sort(lt, new Sortbygrade()); //Sortir la liste for(Student sd:lt) System.out.println(sd); } } //Classe étudiant class Student{ int num,grade; String name; //Constructeur public Student(int num,int grade,String name){ this.num=num; this.name=name; this.grade=grade; } //Il est nécessaire de redéfinir public String toString(){ // System.out.println("hi"); return "Numéro d'étudiant :"+this.num+"\t"+"Nom :"+this.name+" "+"成绩:"+this.grade; } } //Créer une classe comparateur 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 la sortie est représenté comme suit :
du cadre de collection ListRésumé :
1、La collection List est en fait un tableau dynamique, les éléments peuvent être extraits directement par un boucle for, sans nécessiter d'itération.
2、Lorsque vous sortez une collection List, il appelle par défaut la méthode toString()de l'objet stocké dans la collection, donc vous devez l'overrider dans la classe.
Si vous ne surchargez 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+" Nom :"+s.name+" Résultat :"+s.grade); }
3、Pour trier une collection List, il est nécessaire d'utiliser l'outil Collections, c'est-à-dire la méthode Collections.Sort(list, new ComparateurClasse()) . Par conséquent, il est nécessaire de définir une classe de comparateur personnalisé, définir vos propres règles de comparaison.
2、Utiliser la collection Set pour réaliser
(1) utiliser TreeSet pour réaliser
package com.package1; import java.util.*; public class StuScore { public static void main(String[] args) { //Ajouter des éléments à l'intérieur for(int i=20070301,j=1;i<=20070330;i++,j++) { ts.add(new Student(i,"Étudiant"+j,(int) (40*Math.random()+60))); } //Itération itérative pour extraire Iterator<Student> it=ts.iterator(); while(it.hasNext()) { Student o1=it.next(); System.out.println("学号:"+o1.num+" "+"姓名:"+o1.name+" "+" "+"Résultat :"+o1.grade); } } } //Classe étudiant 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 la sortie est :
Numéro d'étudiant :20070307 Nom : Étudiant16 Résultat :60
Numéro d'étudiant :20070309 Nom : Étudiant18 Résultat :60
Numéro d'étudiant :20070314 Nom : Étudiant23 Résultat :61
Numéro d'étudiant :20070318 Nom : Étudiant27 Résultat :61
Numéro d'étudiant :20070322 Nom : Étudiant31 Résultat :61
Numéro d'étudiant :20070306 Nom : Étudiant15 Résultat :62
Numéro d'étudiant :20070310 Nom : Étudiant19 Résultat :64
Numéro d'étudiant :20070302 Nom : Étudiant11 Résultat :66
Numéro d'étudiant :20070308 Nom : Étudiant17 Résultat :68
Numéro d'étudiant :20070321 Nom : Étudiant30 Résultat :68
Numéro d'étudiant :20070330 Nom : Étudiant39 Résultat :69
Numéro d'étudiant :20070303 Nom : Étudiant12 Résultat :70
Numéro d'étudiant :20070320 Nom : Étudiant29 Résultat :70
Numéro d'étudiant :20070323 Nom : Étudiant32 Résultat :77
Numéro d'étudiant :20070313 Nom : Étudiant22 Résultat :78
Numéro d'étudiant :20070304 Nom : Étudiant13 Résultat :79
Numéro d'étudiant :20070324 Nom : Étudiant33 Résultat :83
Numéro d'étudiant :20070326 Nom : Étudiant35 Résultat :84
Numéro d'étudiant :20070327 Nom : Étudiant36 Résultat :85
Numéro d'étudiant :20070311 Nom : Étudiant20 Résultat :88
Numéro d'étudiant :20070305 Nom : Étudiant14 Résultat :89
Numéro d'étudiant :20070329 Nom : Étudiant38 Résultat :89
Numéro d'étudiant :20070316 Nom : Étudiant25 Résultat :90
Numéro d'étudiant :20070301 Nom : Étudiant10 Résultat :95
Numéro d'étudiant :20070312 Nom : Étudiant21 Résultat :96
Numéro d'étudiant :20070317 Nom : Étudiant26 Résultat :97
Numéro d'étudiant :20070319 Nom : Étudiant28 Résultat :97
Numéro d'étudiant :20070325 Nom : Étudiant34 Résultat :98
Numéro d'étudiant :20070315 Nom : Étudiant24 Résultat :99
Numéro d'étudiant :20070328 Nom : Étudiant37 Résultat :99
Contrairement àTreeSetRésumé :
1、Les éléments ne peuvent pas être répétés, et TreeSet est ordonné.
2、Deux méthodes de tri :
(1) définir une classe de comparateur personnalisé, par exemple class Com implements Comparator { } , implémenter compare(Object o1, Object o2) méthode, dans laquelle vous définissez les règles de comparaison.
(2) pour que l'élément ait la capacité de comparaison.
Étapes : implémenter l'interface Comparable pour l'élément ajouté au TreeSet et surcharger la méthode compareTo. Cet ordre est également l'ordre naturel des éléments, ou appelé ordre par défaut.
méthode1et la méthode2La différence :
Les deux méthodes ont leurs avantages et inconvénients. Utiliser Comparable est simple, il suffit d'implémenter l'interface Comparable pour que l'objet devienne directement un objet comparable, mais cela nécessite de modifier le code source.
L'avantage d'utiliser Comparator est qu'il n'est pas nécessaire de modifier le code source, mais de réaliser un comparateur supplémentaire. Lorsqu'un objet personnalisé doit être comparé, le comparateur et l'objet sont transmis ensemble pour permettre la comparaison. Dans Comparator, l'utilisateur peut réaliser des logiques complexes et générales, permettant ainsi de correspondre à certains objets simples, ce qui permet de gagner beaucoup de temps et d'efforts répétés.
(2)en utilisantHashSetpour réaliser
package com.package1; import java.util.*; public class StuScore { public static void main(String[] args) { HashSet<Student> hs=new HashSet<Student>(); //Ajouter des éléments à l'intérieur for(int i=20070301,j=1;i<=20070330;i++,j++) { hs.add(new Student(i,"camarade"+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); } } //Classe étudiant 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 "Numéro d'étudiant :"+this.num+"\t"+"Nom :"+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; } }
Le résultat de la sortie est le suivant :
Numéro d'étudiant :20070310 Nom : camarade19 Note :60
Numéro d'étudiant :20070330 Nom : camarade39 Note :62
Numéro d'étudiant :20070326 Nom : camarade35 Note :63
Numéro d'étudiant :20070317 Nom : camarade26 Note :64
Numéro d'étudiant :20070318 Nom : camarade27 Note :65
Numéro d'étudiant :20070322 Nom : camarade31 Note :65
Numéro d'étudiant :20070301 Nom : camarade10 Note :67
Numéro d'étudiant :20070328 Nom : camarade37 Note :68
Numéro d'étudiant :20070304 Nom : camarade13 Note :68
Numéro d'étudiant :20070319 Nom : camarade28 Note :69
Numéro d'étudiant :20070313 Nom : camarade22 Note :70
Numéro d'étudiant :20070303 Nom : camarade12 Note :71
Numéro d'étudiant :20070312 Nom : camarade21 Note :71
Numéro d'étudiant :20070329 Nom : camarade38 Note :72
Numéro d'étudiant :20070306 Nom : camarade15 Note :72
Numéro d'étudiant :20070324 Nom : camarade33 Note :72
Numéro d'étudiant :20070305 Nom : camarade14 Note :75
Numéro d'étudiant :20070315 Nom : camarade24 Note :75
Numéro d'étudiant :20070314 Nom : camarade23 Note :78
Numéro d'étudiant :20070307 Nom : camarade16 Note :80
Numéro d'étudiant :20070311 Nom : camarade20 Note :81
Numéro d'étudiant :20070302 Nom : camarade11 Note :83
Numéro d'étudiant :20070309 Nom : camarade18 Note :84
Numéro d'étudiant :20070320 Nom : camarade29 Note :85
Numéro d'étudiant :20070321 Nom : camarade30 Note :85
Numéro d'étudiant :20070316 Nom : camarade25 Note :86
Numéro d'étudiant :20070327 Nom : camarade36 Note :90
Numéro d'étudiant :20070308 Nom : camarade17 Note :94
Numéro d'étudiant :20070323 Nom : camarade32 Note :94
Numéro d'étudiant :20070325 Nom : camarade34 Note :95
Contrairement àHashSetRésumé :
1Les éléments de HashSet ne peuvent pas être répétés. Si vous ajoutez à nouveau, il ne sera affiché qu'un seul.
Le principe est le suivant :
HashSet : la structure de données de base est une table de hachage. Elle n'est pas sécurisée en mode multithreadé. Non synchronisée.
2Comment assure HashSet l'unicité des éléments ?
答:是通过元素的两个方法,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) { //Si les notes sont égales, triez par nom return this.name.compareTo(o.name); } return -1; } }
Le résultat de la sortie est :
Numéro d'étudiant :20070303 Nom : Étudiant12 Note :61
Numéro d'étudiant :20070323 Nom : Étudiant32 Note :61
Numéro d'étudiant :20070317 Nom : Étudiant26 Note :62
Numéro d'étudiant :20070309 Nom : Étudiant18 Note :64
Numéro d'étudiant :20070301 Nom : Étudiant10 Note :67
Numéro d'étudiant :20070304 Nom : Étudiant13 Note :69
Numéro d'étudiant :20070322 Nom : Étudiant31 Note :69
Numéro d'étudiant :20070328 Nom : Étudiant37 Note :70
Numéro d'étudiant :20070305 Nom : Étudiant14 Note :71
Numéro d'étudiant :20070319 Nom : Étudiant28 Note :73
Numéro d'étudiant :20070321 Nom : Étudiant30 Note :74
Numéro d'étudiant :20070310 Nom : Étudiant19 Note :81
Numéro d'étudiant :20070315 Nom : Étudiant24 Note :82
Numéro d'étudiant :20070307 Nom : Étudiant16 Note :84
Numéro d'étudiant :20070330 Nom : Étudiant39 Note :84
Numéro d'étudiant :20070312 Nom : Étudiant21 Note :85
Numéro d'étudiant :20070324 Nom : Étudiant33 Note :87
Numéro d'étudiant :20070306 Nom : Étudiant15 Note :88
Numéro d'étudiant :20070308 Nom : Étudiant17 Note :90
Numéro d'étudiant :20070327 Nom : Étudiant36 Note :90
Numéro d'étudiant :20070318 Nom : Étudiant27 Note :91
Numéro d'étudiant :20070316 Nom : Étudiant25 Note :92
Numéro d'étudiant :20070320 Nom : Étudiant29 Note :92
Numéro d'étudiant :20070314 Nom : Étudiant23 Note :93
Numéro d'étudiant :20070313 Nom : Étudiant22 Note :94
Numéro d'étudiant :20070302 Nom : Étudiant11 Note :95
Numéro d'étudiant :20070325 Nom : Étudiant34 Note :95
Numéro d'étudiant :20070329 Nom : Étudiant38 Note :97
Numéro d'étudiant :20070326 Nom : Étudiant35 Note :98
Numéro d'étudiant :20070311 Nom : Étudiant20 Note :99
Contrairement àTreeMapRésumé :
1TreeMap trie par défaut les clés, donc vous pouvez mettre des objets personnalisés dans les clés, et mettre des entiers entiers représentant les numéros d'étudiant en valeur. Lors de la hiérarchie des clés, vous pouvez spécifier une propriété de l'objet personnalisé pour hiérarchiser.
2L'ajout d'éléments à l'ensemble Map en utilisant la méthode put ()
3Le principe d'extraction de l'ensemble Map : convertir l'ensemble Map en ensemble Set, puis extraire à l'aide de l'itérateur. Deux méthodes d'extraction de l'ensemble Map :
(1Set<k> keySet :Tous les clés du map sont stockées dans l'ensemble Set. Comme Set possède un itérateur, toutes les clés peuvent être extraites de manière itérative, puis obtenues en utilisant la méthode get pour chaque clé.
(2Set<Map.Entry<k,v>> entrySet :La relation de correspondance de l'ensemble map est stockée dans l'ensemble set, et le type de données de cette relation est : Map.Entry
Voici la fin de cet article, j'espère qu'il vous sera utile dans vos études, et j'espère que vous soutiendrez également le tutoriel Yelling.
Déclaration : le contenu de cet article est extrait du réseau, la propriété intellectuelle appartient à ses auteurs respectifs, le contenu est contribué et téléchargé par les utilisateurs d'Internet, le site Web ne possède pas de propriété, n'a pas été édité par l'homme et n'assume aucune responsabilité juridique. Si vous trouvez du contenu susceptible de violer les droits d'auteur, n'hésitez pas à envoyer un e-mail à : notice#w3Pour signaler une violation, veuillez envoyer un e-mail à codebox.com (remplacez # par @) et fournir des preuves pertinentes. Une fois confirmée, le site supprimera immédiatement le contenu suspect de violation de droit d'auteur.