Question: Le numéro d'étudiant de 30 étudiants dans une certaine classe est 20070301-20070330. Tous ont suivi des cours de programmation Java et étant donné les notes de tous les étudiants (peuvent être générés par des nombres aléatoires, avec une fourchette de 60 à 100). Veuillez rédiger un programme pour imprimer les notes de tous les étudiants de cette classe afin de bas à haut.
Exigences: utilisez la liste, la carte et la définition pour l'implémenter séparément. Les informations imprimées comprennent le numéro d'étudiant, le nom et les notes.
1. Utilisez la collection de la liste pour implémenter
import java.util.arraylist; Importer java.util.collections; Importer java.util.comparator; Importer java.util.iterator; import java.util.linkedlist; import java.util.treemap; classe publique test2 {public static void main (String [] args) {/ * implémenté avec ArrayList ici * * ArrayList <Student> al = new ArrayList <Student> (); pour (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {al.add (nouveau étudiant (i, (int) (40 * math.random () + 60), "étudiant" + j)); } // Le tri ArrayList est réalisé par la méthode SORT () dans les collections. Collection.Sort (Al, new sortBygrate ()); pour (Student SD: Al) System.out.println (SD); * / LinkedList <Student> lt = new LinkedList <Student> (); pour (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {lt.add (nouveau étudiant (i, (int) (40 * math.random () + 60), "étudiant" + j)); } // trier les collections liés.Sort (lt, new sortBygrate ()); // Sortie Liste liée pour (Student SD: LT) System.out.println (SD); }} // classe d'étudiant étudiant {int num, grade; Nom de chaîne; // Étudiant public constructeur (int num, int, nom de chaîne) {this.num = num; this.name = name; this.grade = grade; } // public String toString () {// system.out.println ("hi"); Renvoie "Numéro d'étudiant:" + this.num + "/ t" + "Nom:" + this.name + "" + "score:" + this.grade; }} // Créer une classe de comparaison SORTBYGRADE Implémentez le comparateur <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); retour 0; }}Le résultat de sortie est illustré sur la figure:
Résumé du cadre de collection de liste:
1. La collection de liste est en fait un tableau dynamique, et les éléments peuvent être directement supprimés via une boucle pour une boucle sans itération.
2. Lors de la sortie d'une collection de liste, la méthode toString () qui stocke l'objet dans la collection sera appelée par défaut, il doit donc être écrasé dans la classe.
Si la méthode toString () n'est pas remplacée, elle doit être utilisée
pour (int i = 0; i <lt.size (); i ++) {étudiant s = lt.get (i); System.out.println ("Numéro d'étudiant:" + S.NUM + "Nom:" + S.Name + "Score:" + S.Grade); } 3. Le tri des collections de liste nécessite l'aide de la classe d'outils de collections, c'est-à-dire la méthode Collection.Sort (list, new Comparator Class ()). Par conséquent, vous devez personnaliser une classe de comparaison et définir vos propres règles de comparaison.
2. Utiliser la collection de set pour implémenter
(1) Utiliser Treeset pour mettre en œuvre
package com.package1; import java.util. *; classe publique statuse {public static void main (String [] args) {arreset <Student> ts = new Treeset <Student> (new Com ()); // ajouter des éléments pour (int i = 20070301, j = 1; i <= 20070330; i ++, j ++) {ts.add (new student (i, "étudiant" + j, (int) (40 * math.random () + 60)))); } // boucle itérative pour récupérer Iterator <Student> it = ts.Iterator (); while (it.hasnext ()) {étudiant o1 = it.next (); System.out.println ("Numéro d'étudiant:" + o1.num + "" + "Nom:" + o1.name + "" + "" + "score:" + o1.grade); }}} // classe d'étudiant étudiant {int num; Grade int; Nom de chaîne; Étudiant public (int num, nom de chaîne, int grade) {this.num = num; this.name = name; this.grade = grade; }} classe com implémente le comparateur {@Override public int compare (objet o1, objet o2) {étudiant s1 = (étudiant) o1; Student S2 = (étudiant) 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:
Étudiant ID: 20070307 Nom: Classmate 16 Score: 60
Étudiant ID: 20070309 Nom: Classmate 18 Score: 60
Étudiant ID: 20070314 Nom: Classmate 23 Score: 61
Étudiant ID: 20070318 Nom: Classe Classe 27 Score: 61
Étudiant ID: 20070322 Nom: Classmate 31 Score: 61
Étudiant ID: 20070306 Nom: Classmate 15 Score: 62
Étudiant ID: 20070310 Nom: Classmate 19 Score: 64
Étudiant ID: 20070302 Nom: Classmate 11 Score: 66
Étudiant ID: 20070308 Nom: Classmate 17 Score: 68
Étudiant ID: 20070321 Nom: Classmate 30 Score: 68
Étudiant ID: 20070330 Nom: Classmate 39 Score: 69
Étudiant ID: 20070303 Nom: Classmate 12 Score: 70
Étudiant ID: 20070320 Nom: Classe Camor 29 Score: 70
Étudiant ID: 20070323 Nom: Classmate 32 Score: 77
Étudiant ID: 20070313 Nom: Classmate 22 Score: 78
Étudiant ID: 20070304 Nom: Classmate 13 Score: 79
Étudiant ID: 20070324 Nom: Classmate 33 Score: 83
Étudiant ID: 20070326 Nom: Classmate 35 Score: 84
Étudiant ID: 20070327 Nom: Classmate 36 Score: 85
Étudiant ID: 20070311 Nom: Classmate 20 Score: 88
Étudiant ID: 20070305 Nom: Classmate 14 Score: 89
Étudiant ID: 20070329 Nom: Classmate 38 Score: 89
Étudiant ID: 20070316 Nom: Classmate 25 Score: 90
Étudiant ID: 20070301 Nom: Classmate 10 Score: 95
Étudiant ID: 20070312 Nom: Classmate 21 Score: 96
Étudiant ID: 20070317 Nom: Classe Camor 26 Score: 97
Étudiant ID: 20070319 Nom: Classmate 28 Score: 97
Étudiant ID: 20070325 Nom: Classmate 34 Score: 98
Étudiant ID: 20070315 Nom: Classmate 24 Score: 99
Étudiant ID: 20070328 Nom: Classmate 37 Score: 99
Résumé de Treeset :
1. Les éléments ne peuvent pas être répétés et l'arbre est ordonné.
2. Deux méthodes de tri:
(1) Personnaliser une classe de comparaison, telle que la classe com implémentecomparator {}, implémentez la méthode Compare (objet O1, objet O2) et définissez les règles de comparaison.
(2) rendre les éléments eux-mêmes comparatifs.
ÉTAPES: Ajoutez l'élément dans Treeset pour implémenter l'interface comparable et remplacer la méthode compareto. Cet ordre est également l'ordre naturel des éléments, ou l'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. Il est simple d'utiliser comparable. Tant que l'objet qui implémente l'interface comparable devient un objet comparable, il nécessite une modification du code source.
L'avantage de l'utilisation du comparateur est qu'il ne nécessite pas de modification du code source, mais d'implémentation d'un comparateur. Lorsqu'un objet personnalisé doit être comparé, passer le comparateur et l'objet ensemble peut comparer la taille. Dans le comparateur, les utilisateurs peuvent implémenter une logique complexe et générale par eux-mêmes, afin qu'ils puissent correspondre à certains objets relativement simples, ce qui peut économiser beaucoup de travail répétitif.
(2) Utiliser un hashset pour implémenter
package com.package1; import java.util. *; classe publique statuse {public static void main (String [] args) {hashset <Student> hs = new hashset <Student> (); // ajouter des éléments pour (int i = 20070301, j = 1; i <= 20070330; i ++, j ++) {Hs.add (new student (i, "étudiant" + j, (int) (40 * math.random () + 60)))); } ArrayList <Student> li = new ArrayList (HS); Collection.Sort (Li, New SortBygrate ()); pour (Student SS: Li) System.out.println (SS); }} // classe d'étudiant étudiant {int num; Grade int; Nom de chaîne; Étudiant public (int num, nom de chaîne, int grade) {this.num = num; this.name = name; this.grade = grade; } public String toString () {//system.out.println("hi "); Renvoie "Numéro d'étudiant:" + this.num + "/ t" + "Nom:" + this.name + "" + "score:" + this.grade; }} classe SortBygrate implémente le comparateur {@Override public int compare (objet o1, objet o2) {Student S1 = (Student) o1; Student S2 = (étudiant) 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 sortie est le suivant:
Étudiant ID: 20070310 Nom: Classmate 19 Score: 60
Étudiant ID: 20070330 Nom: Classmate 39 Score: 62
Étudiant ID: 20070326 Nom: Classmate 35 Score: 63
Étudiant ID: 20070317 Nom: Classe Camor 26 Score: 64
Étudiant ID: 20070318 Nom: Classmate 27 Score: 65
Étudiant ID: 20070322 Nom: Classmate 31 Score: 65
Étudiant ID: 20070301 Nom: Classmate 10 Score: 67
Étudiant ID: 20070328 Nom: Classmate 37 Score: 68
Étudiant ID: 20070304 Nom: Classmate 13 Score: 68
Étudiant ID: 20070319 Nom: Classmate 28 Score: 69
Étudiant ID: 20070313 Nom: Classmate 22 Score: 70
Étudiant ID: 20070303 Nom: Classmate 12 Score: 71
Étudiant ID: 20070312 Nom: Classmate 21 Score: 71
Étudiant ID: 20070329 Nom: Classmate 38 Score: 72
Étudiant ID: 20070306 Nom: Classmate 15 Score: 72
Étudiant ID: 20070324 Nom: Classmate 33 Score: 72
Étudiant ID: 20070305 Nom: Classmate 14 Score: 75
Étudiant ID: 20070315 Nom: Classmate 24 Score: 75
Étudiant ID: 20070314 Nom: Classe Camor 23 Score: 78
Étudiant ID: 20070307 Nom: Classmate 16 Score: 80
Étudiant ID: 20070311 Nom: Classmate 20 Score: 81
Étudiant ID: 20070302 Nom: Classmate 11 Score: 83
Étudiant ID: 20070309 Nom: Classmate 18 Score: 84
Étudiant ID: 20070320 Nom: Classe Camor 29 Score: 85
Étudiant ID: 20070321 Nom: Classmate 30 Score: 85
Étudiant ID: 20070316 Nom: Classmate 25 Score: 86
Étudiant ID: 20070327 Nom: Classmate 36 Score: 90
Étudiant ID: 20070308 Nom: Classmate 17 Score: 94
Étudiant ID: 20070323 Nom: Classmate 32 Score: 94
Étudiant ID: 20070325 Nom: Classmate 34 Score: 95
Résumé de Hashset :
1. Les éléments du hashset ne peuvent pas être répétés. S'ils sont ajoutés à plusieurs reprises, un seul sera affiché.
Le principe est le suivant:
Hashset: La structure de données sous-jacente est une table de hachage. Il est insérété. Hors synchronisé.
2. Comment Hashset assure-t-il le caractère unique des éléments?
Réponse: Cela se fait par deux méthodes d'éléments, de code de hash et d'égal.
Si la valeur de code de hash de l'élément est la même, il sera déterminé si l'égalité est vraie. Si la valeur de code de hash de l'élément est différente, les égaux ne seront pas appelés.
3. Triez le hashset en convertissant la collection de sets en une collection de liste et en mettant en œuvre le tri à l'aide de la méthode Collection.Sort ().
3. Utilisez Treemap pour l'implémenter
package com.package1; Importer java.util.comparator; Importer java.util.iterator; import java.util.set; import java.util.treemap; classe publique TestTreemap {public static void main (String [] args) {// 1. Créez une collection Treemap <étudiant, entier> tm = new Treemap <étudiant, entier> (); pour (int i = 20070301, j = 10; i <= 20070330; i ++, j ++) {int grade = (int) (40 * math.random () + 60); // 2. Ajouter l'élément TM.put (nouvel étudiant (grade, "étudiant" + j), i); } // 3. Traverser l'ensemble et le tri Il est terminé Set <Student> k = tm.KeySet (); Iterator <Student> it = k.iterator (); while (it.hasnext ()) {Student key = it.next (); Entier num = tm.get (key); System.out.println ("numéro d'étudiant:" + num + "" + "Nom:" + key.name + "" + "score:" + key.grade); }}} Classe Student implémente <Student> {int grade; Nom de chaîne; Étudiant public (int grade, nom de chaîne) {this.grade = grade; this.name = name; } @Override public int compareto (étudiant o) {if (this.grade> o.grade) return 1; if (this.grade == o.grade) {// Lorsque les grades sont les mêmes, trié par nom return this.name.compareto (o.name); } return -1; }} Le résultat de la sortie est:
Étudiant ID: 20070303 Nom: Classmate 12 Score: 61
Étudiant ID: 20070323 Nom: Classmate 32 Score: 61
Étudiant ID: 20070317 Nom: Classmate 26 Score: 62
Étudiant ID: 20070309 Nom: Classmate 18 Score: 64
Étudiant ID: 20070301 Nom: Classmate 10 Score: 67
Étudiant ID: 20070304 Nom: Classmate 13 Score: 69
Étudiant ID: 20070322 Nom: Classmate 31 Score: 69
Étudiant ID: 20070328 Nom: Classmate 37 Score: 70
Étudiant ID: 20070305 Nom: Classmate 14 Score: 71
Étudiant ID: 20070319 Nom: Classmate 28 Score: 73
Étudiant ID: 20070321 Nom: Classmate 30 Score: 74
Étudiant ID: 20070310 Nom: Classmate 19 Score: 81
Étudiant ID: 20070315 Nom: Classmate 24 Score: 82
Étudiant ID: 20070307 Nom: Classmate 16 Score: 84
Étudiant ID: 20070330 Nom: Classmate 39 Score: 84
Étudiant ID: 20070312 Nom: Classmate 21 Score: 85
Étudiant ID: 20070324 Nom: Classmate 33 Score: 87
Étudiant ID: 20070306 Nom: Classmate 15 Score: 88
Étudiant ID: 20070308 Nom: Classmate 17 Score: 90
Étudiant ID: 20070327 Nom: Classmate 36 Score: 90
Étudiant ID: 20070318 Nom: Classmate 27 Score: 91
Étudiant ID: 20070316 Nom: Classmate 25 Score: 92
Étudiant ID: 20070320 Nom: camarade de classe 29 Score: 92
Étudiant ID: 20070314 Nom: Classmate 23 Score: 93
Étudiant ID: 20070313 Nom: Classmate 22 Score: 94
Étudiant ID: 20070302 Nom: Classmate 11 Score: 95
Étudiant ID: 20070325 Nom: Classmate 34 Score: 95
Étudiant ID: 20070329 Nom: Classmate 38 Score: 97
Étudiant ID: 20070326 Nom: Classmate 35 Score: 98
Étudiant ID: 20070311 Nom: Classmate 20 Score: 99
Résumé de Treemap :
1. Treemap trie la clé par défaut, vous pouvez donc mettre des objets personnalisés dans la clé et mettre l'entier représentant le numéro d'étudiant dans la valeur. Lors du tri d'une clé, vous pouvez spécifier un attribut dans un objet personnalisé pour le trier.
2. La collection de cartes utilise la méthode put () pour ajouter des éléments.
3. Le principe de l'élimination de la carte: convertir l'ensemble de la carte en un ensemble. Sortez par l'itérateur. Deux façons d'extraire les collections de cartes:
(1) SET <K> SETYSET: Enregistrez toutes les touches de la carte dans la collection SET. Parce que Set a des itérateurs. Toutes les clés peuvent être récupérées de manière itérative en fonction de la méthode GET. Obtenez la valeur correspondant à chaque clé.
(2) set <map.entry <k, v >> Entrée: stocker la relation de mappage dans la collection de cartes dans la collection de set, et le type de données de cette relation est: map.entry
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.