English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pregunta:Clase30, el número de matrícula del estudiante es20070301-20070330, todos los estudiantes han elegido el curso de diseño de programas de Java, se proporcionan todas las calificaciones de los estudiantes (se pueden generar números aleatorios, rango60-100),Escriba un programa para ordenar y imprimir las calificaciones de todos los estudiantes de la clase de manera ascendente.
Requisitos:Implementar con List, Map y Set, la información impresa incluye número de matrícula, nombre y calificación.
1、Implementar utilizando la colección 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){ /* Aquí se utiliza 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), "compañero"+j)); } //El ordenamiento de ArrayList se realiza mediante el método 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), "compañero"+j)); } //Ordenar la lista Collections.sort(lt, new Sortbygrade()); //Salida de la lista for(Student sd:lt) System.out.println(sd); } } //Clase de estudiante class Student{ int num,grade; String name; //Constructor public Student(int num,int grade,String name){ this.num=num; this.name=name; this.grade=grade; } //Aquí debe sobrescribirse public String toString(){ // System.out.println("hi"); return "Número de matrícula:"+this.num+"\t"+"Nombre:"+this.name+" "+"成绩:"+this.grade; } } //Crear una clase comparadora 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; } }
El resultado de la salida se muestra en la figura:
Para el cuadro de la colección ListResumen:
1La colección List es en realidad un array dinámico, los elementos pueden ser extraídos directamente a través de un bucle for, sin necesidad de iteración.
2) al imprimir conjuntos List, se llama por defecto al método toString()almacenado en el objeto del conjunto, por lo tanto, es necesario sobrescribir en la clase.
Si no se sobrescribe el método toString( ), entonces debe usarse
for(int i=0; i<lt.size(); i++) { Student s=lt.get(i); System.out.println("学号:"+s.num+" Nombre:",+s.name+" Calificaciones:",+s.grade); }
3) para ordenar conjuntos List se necesita utilizar la clase de herramientas Collections, es decir, Collections.Sort(list, new ClaseComparadora()) método. Por lo tanto, es necesario personalizar una clase comparadora, definir sus propias reglas de comparación.
2) utilizar conjuntos Set para implementar
(1) utilizar TreeSet para implementar
package com.package1; import java.util.*; public class StuScore { public static void main(String[] args) { TreeSet<Student> ts=new TreeSet<Student>(new Com()); //Agregar elementos dentro for(int i=20070301,j=1;i<=20070330;i++,j++) { ts.add(new Student(i, "Estudiante",+j, (int) (40*Math.random()+60))); } //Iterar y extraer Iterator<Student> it=ts.iterator(); while(it.hasNext()) { Student o1=it.next(); System.out.println("学号:"+o1.num+" ",+"姓名:"+o1.name+" ",+" ",+"Calificaciones:",+o1.grade); } } } //Clase de estudiante 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); } return 0; } }
El resultado de la salida es:
Número de matrícula:20070307 Nombre: Estudiante16 Calificaciones:60
Número de matrícula:20070309 Nombre: Estudiante18 Calificaciones:60
Número de matrícula:20070314 Nombre: Estudiante23 Calificaciones:61
Número de matrícula:20070318 Nombre: Estudiante27 Calificaciones:61
Número de matrícula:20070322 Nombre: Estudiante31 Calificaciones:61
Número de matrícula:20070306 Nombre: Estudiante15 Calificaciones:62
Número de matrícula:20070310 Nombre: Estudiante19 Calificaciones:64
Número de matrícula:20070302 Nombre: Estudiante11 Calificaciones:66
Número de matrícula:20070308 Nombre: Estudiante17 Calificaciones:68
Número de matrícula:20070321 Nombre: Estudiante30 Calificaciones:68
Número de matrícula:20070330 Nombre: Estudiante39 Calificaciones:69
Número de matrícula:20070303 Nombre: Estudiante12 Calificaciones:70
Número de matrícula:20070320 Nombre: Estudiante29 Calificaciones:70
Número de matrícula:20070323 Nombre: Estudiante32 Calificaciones:77
Número de matrícula:20070313 Nombre: Estudiante22 Calificaciones:78
Número de matrícula:20070304 Nombre: Estudiante13 Calificaciones:79
Número de matrícula:20070324 Nombre: Estudiante33 Calificaciones:83
Número de matrícula:20070326 Nombre: Estudiante35 Calificaciones:84
Número de matrícula:20070327 Nombre: Estudiante36 Calificaciones:85
Número de matrícula:20070311 Nombre: Estudiante20 Calificaciones:88
Número de matrícula:20070305 Nombre: Estudiante14 Calificaciones:89
Número de matrícula:20070329 Nombre: Estudiante38 Calificaciones:89
Número de matrícula:20070316 Nombre: Estudiante25 Calificaciones:90
Número de matrícula:20070301 Nombre: Estudiante10 Calificaciones:95
Número de matrícula:20070312 Nombre: Estudiante21 Calificaciones:96
Número de matrícula:20070317 Nombre: Estudiante26 Calificaciones:97
Número de matrícula:20070319 Nombre: Estudiante28 Calificaciones:97
Número de matrícula:20070325 Nombre: Estudiante34 Calificaciones:98
Número de matrícula:20070315 Nombre: Estudiante24 Calificaciones:99
Número de matrícula:20070328 Nombre: Estudiante37 Calificaciones:99
ParaTreeSetResumen:
1、los elementos no pueden repetirse y TreeSet es ordenado.
2、dos métodos de ordenamiento:
(1) personalizar una clase comparadora, por ejemplo, class Com implements Comparator { } , implementar compare(Object o1, Object o2) definir las reglas de comparación en el método.
(2) hacer que el elemento tenga comparabilidad por sí mismo.
Pasos: Implementar el interfaz Comparable para los elementos que se agregarán a TreeSet y sobrescribir el método compareTo. Este orden también es el orden natural de los elementos, o también se llama orden por defecto.
método1y el método2La diferencia es:
Las dos métodos tienen sus propias ventajas y desventajas, Comparable es simple, cualquier objeto que implemente el interfaz Comparable se convierte directamente en un objeto comparable, pero es necesario modificar el código fuente.
La ventaja de usar Comparator es que no es necesario modificar el código fuente, sino que se debe implementar otro comparador. Cuando un objeto personalizado necesita进行比较时,se puede pasar el comparador y el objeto juntos para compararlos, y en Comparator, el usuario puede implementar lógicas complejas y comunes por sí mismo, lo que puede coincidir con algunos objetos más simples, de modo que se pueden ahorrar muchas tareas repetitivas.
(2)usarHashSetpara implementar
package com.package1; import java.util.*; public class StuScore { public static void main(String[] args) { HashSet<Student> hs=new HashSet<Student>(); //Agregar elementos dentro for(int i=20070301,j=1;i<=20070330;i++,j++) { hs.add(new Student(i,"Estudiante"+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); } } //Clase de estudiante 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 "Número de matrícula:"+this.num+"\t"+"Nombre:"+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; } }
El resultado de salida es el siguiente:
Número de matrícula:20070310 Nombre: Estudiante19 Puntuación:60
Número de matrícula:20070330 Nombre: Estudiante39 Puntuación:62
Número de matrícula:20070326 Nombre: Estudiante35 Puntuación:63
Número de matrícula:20070317 Nombre: Estudiante26 Puntuación:64
Número de matrícula:20070318 Nombre: Estudiante27 Puntuación:65
Número de matrícula:20070322 Nombre: Estudiante31 Puntuación:65
Número de matrícula:20070301 Nombre: Estudiante10 Puntuación:67
Número de matrícula:20070328 Nombre: Estudiante37 Puntuación:68
Número de matrícula:20070304 Nombre: Estudiante13 Puntuación:68
Número de matrícula:20070319 Nombre: Estudiante28 Puntuación:69
Número de matrícula:20070313 Nombre: Estudiante22 Puntuación:70
Número de matrícula:20070303 Nombre: Estudiante12 Puntuación:71
Número de matrícula:20070312 Nombre: Estudiante21 Puntuación:71
Número de matrícula:20070329 Nombre: Estudiante38 Puntuación:72
Número de matrícula:20070306 Nombre: Estudiante15 Puntuación:72
Número de matrícula:20070324 Nombre: Estudiante33 Puntuación:72
Número de matrícula:20070305 Nombre: Estudiante14 Puntuación:75
Número de matrícula:20070315 Nombre: Estudiante24 Puntuación:75
Número de matrícula:20070314 Nombre: Estudiante23 Puntuación:78
Número de matrícula:20070307 Nombre: Estudiante16 Puntuación:80
Número de matrícula:20070311 Nombre: Estudiante20 Puntuación:81
Número de matrícula:20070302 Nombre: Estudiante11 Puntuación:83
Número de matrícula:20070309 Nombre: Estudiante18 Puntuación:84
Número de matrícula:20070320 Nombre: Estudiante29 Puntuación:85
Número de matrícula:20070321 Nombre: Estudiante30 Puntuación:85
Número de matrícula:20070316 Nombre: Estudiante25 Puntuación:86
Número de matrícula:20070327 Nombre: Estudiante36 Puntuación:90
Número de matrícula:20070308 Nombre: Estudiante17 Puntuación:94
Número de matrícula:20070323 Nombre: Estudiante32 Puntuación:94
Número de matrícula:20070325 Nombre: Estudiante34 Puntuación:95
ParaHashSetResumen:
1Los elementos de HashSet no pueden repetirse, si se agrega repetidamente, solo se mostrará uno.
El principio es el siguiente:
HashSet: la estructura de datos subyacente es una tabla de hash. No es seguro para threads. No sincronizado.
2¿Cómo asegura HashSet la unicidad de los elementos?
答:是通过元素的两个方法,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) { //Al igual que las puntuaciones, se ordena según el nombre return this.name.compareTo(o.name); } return -1; } }
El resultado de la salida es:
Número de matrícula:20070303 Nombre: Estudiante12 Puntuación:61
Número de matrícula:20070323 Nombre: Estudiante32 Puntuación:61
Número de matrícula:20070317 Nombre: Estudiante26 Puntuación:62
Número de matrícula:20070309 Nombre: Estudiante18 Puntuación:64
Número de matrícula:20070301 Nombre: Estudiante10 Puntuación:67
Número de matrícula:20070304 Nombre: Estudiante13 Puntuación:69
Número de matrícula:20070322 Nombre: Estudiante31 Puntuación:69
Número de matrícula:20070328 Nombre: Estudiante37 Puntuación:70
Número de matrícula:20070305 Nombre: Estudiante14 Puntuación:71
Número de matrícula:20070319 Nombre: Estudiante28 Puntuación:73
Número de matrícula:20070321 Nombre: Estudiante30 Puntuación:74
Número de matrícula:20070310 Nombre: Estudiante19 Puntuación:81
Número de matrícula:20070315 Nombre: Estudiante24 Puntuación:82
Número de matrícula:20070307 Nombre: Estudiante16 Puntuación:84
Número de matrícula:20070330 Nombre: Estudiante39 Puntuación:84
Número de matrícula:20070312 Nombre: Estudiante21 Puntuación:85
Número de matrícula:20070324 Nombre: Estudiante33 Puntuación:87
Número de matrícula:20070306 Nombre: Estudiante15 Puntuación:88
Número de matrícula:20070308 Nombre: Estudiante17 Puntuación:90
Número de matrícula:20070327 Nombre: Estudiante36 Puntuación:90
Número de matrícula:20070318 Nombre: Estudiante27 Puntuación:91
Número de matrícula:20070316 Nombre: Estudiante25 Puntuación:92
Número de matrícula:20070320 Nombre: Estudiante29 Puntuación:92
Número de matrícula:20070314 Nombre: Estudiante23 Puntuación:93
Número de matrícula:20070313 Nombre: Estudiante22 Puntuación:94
Número de matrícula:20070302 Nombre: Estudiante11 Puntuación:95
Número de matrícula:20070325 Nombre: Estudiante34 Puntuación:95
Número de matrícula:20070329 Nombre: Estudiante38 Puntuación:97
Número de matrícula:20070326 Nombre: Estudiante35 Puntuación:98
Número de matrícula:20070311 Nombre: Estudiante20 Puntuación:99
ParaTreeMapResumen:
1Por defecto, TreeMap ordena las claves, por lo que se puede insertar un objeto personalizado en la clave, y poner el entero que representa el número de matrícula en el valor. Al ordenar las claves, se puede especificar alguna propiedad del objeto personalizado para el ordenamiento.
2Uso del método put() para agregar elementos a la colección Map.
3Principio de extracción de la colección Map: convierte la colección map en una colección set y luego extrae mediante el iterador. Dos formas de extraer la colección map:
(1Set<k> keySet:Almacena todas las claves del map en la colección Set. Porque el set tiene un iterador. Por lo tanto, se puede extraer todas las claves de manera iterativa y obtener el valor correspondiente de cada clave según el método get.
(2Set<Map.Entry<k,v>> entrySet:La relación de mapeo de la colección map se ha almacenado en la colección set, y el tipo de datos de esta relación es: Map.Entry
Esto es todo el contenido del artículo, espero que ayude en su aprendizaje y que todos los demás apoyen el tutorial de clamor.
Declaración: El contenido de este artículo se ha obtenido de Internet, pertenece al propietario original, se ha contribuido y subido por los usuarios de Internet de manera voluntaria. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.