Board logo

標題: 自訂排序 (一) [打印本頁]

作者: tonyh    時間: 2022-11-25 17:52     標題: 自訂排序 (一)

本帖最後由 tonyh 於 2022-11-25 21:00 編輯

試定義一集合,集合中包含五個 Student 物件,再透過實作 Comparator 介面自訂比較器,分別完成「依座號遞增排序」及「依分數遞減排序」的比較方法,以 Collections 類別下的 sort() 方法搭配自訂的比較器,分別完成「依座號遞增排序」及「依分數遞減排序」之操作練習。

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class Ch01 {

  5.         ArrayList<Student> stu=new ArrayList<Student>();

  6.         Ch01()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));

  13.                 System.out.println("原始資料:");
  14.                 show();

  15.                 Collections.sort(stu, new MyComparator1());   //使用自定比較器來排序

  16.                 System.out.println("依座號遞增排序:");
  17.                 show();

  18.                 Collections.sort(stu, new MyComparator2());

  19.                 System.out.println("依分數遞減排序:");
  20.                 show();
  21.         }

  22.         void show()
  23.         {
  24.                 System.out.println("座號\t姓名\t分數");
  25.                 System.out.println("-------------------");
  26.                 for(int i=0; i<stu.size(); i++)
  27.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  28.                 System.out.println();
  29.         }

  30.         class MyComparator1 implements Comparator<Student>
  31.         {
  32.                 @Override
  33.                 public int compare(Student o1, Student o2) {  //遞增的比較方法
  34.                         return o1.num-o2.num;
  35.                 }       
  36.         }

  37.         class MyComparator2 implements Comparator<Student>
  38.         {
  39.                 @Override
  40.                 public int compare(Student o1, Student o2) {  //遞減的比較方法
  41.                         return o2.score-o1.score;
  42.                 }       
  43.         }

  44.         class Student   //內部類別
  45.         {
  46.                 int num, score;
  47.                 String name;

  48.                 Student(int n, String m, int s)
  49.                 {
  50.                         num=n;
  51.                         name=m;
  52.                         score=s;
  53.                 }
  54.         }

  55.         public static void main(String[] args) {
  56.                 new Ch01();
  57.         }
  58. }
複製代碼

作者: 黃宥華    時間: 2022-11-25 20:29

  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Collections;
  4. import java.util.Comparator;


  5. public class T2 {
  6.         ArrayList<Student> stu=new ArrayList<T2.Student>();
  7.         T2(){
  8.                 stu.add(new Student(4,"大熊",60));
  9.                 stu.add(new Student(1,"多拉A夢",90));
  10.                 stu.add(new Student(3,"靜香",100));
  11.                 stu.add(new Student(2,"小夫",70));
  12.                 stu.add(new Student(5,"胖虎",20));
  13.                 System.out.println("原始資料:");
  14.         show();
  15.         System.out.println("座號遞增:");
  16.         Collections.sort(stu,new MyComparator1());
  17.         show();
  18.         System.out.println("分數遞減:");
  19.         Collections.sort(stu,new MyComparator2());
  20.         show();
  21.         }
  22.         class MyComparator1 implements Comparator<Student>{
  23.                 public int compare(Student o1,Student o2) {
  24.                         return o1.num-o2.num;
  25.                 }
  26.                
  27.         }
  28.         class MyComparator2 implements Comparator<Student>{
  29.                 public int compare(Student o1,Student o2) {
  30.                         return o2.score-o1.score;
  31.                 }
  32.                
  33.         }
  34.         void show()
  35.     {
  36.             System.out.println("座號\t姓名\t分數");
  37.             System.out.println("-------------------");
  38.             for(int i=0; i<stu.size(); i++)
  39.                     System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  40.             System.out.println();
  41.     }
  42.         class Student{
  43.                 int num,score;
  44.                 String name;
  45.                 Student(int n, String m, int s)
  46.         {
  47.                 num=n;
  48.                 name=m;
  49.                 score=s;
  50.         }
  51.         }
  52.         public static void main(String[] args) {
  53.                 new T2();

  54.         }

  55. }
複製代碼

作者: 陳宥穎    時間: 2022-11-25 20:30

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. public class Ch01 {
  5.         ArrayList<Student> stu=new ArrayList<Ch01.Student>();
  6.         Ch01()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));
  13.                 System.out.println("原始資料:");
  14.                 show();
  15.                 Collections.sort(stu,new com());
  16.                 System.out.println("依座號遞增排序:");
  17.                 show();
  18.                 Collections.sort(stu, new com2());
  19.                 System.out.println("依分數遞減排序:");
  20.                 show();      
  21.         }
  22.         class Student
  23.         {
  24.                 int num,sc;
  25.                 String name;
  26.                 Student(int nu,String na,int s)
  27.                 {
  28.                         num=nu;
  29.                         name=na;
  30.                         sc=s;
  31.                 }
  32.         }
  33.         class com implements Comparator<Student>
  34.         {

  35.                 @Override
  36.                 public int compare(Student o1, Student o2) {
  37.                         return o1.num-o2.num;
  38.                 }

  39.         }
  40.         class com2 implements Comparator<Student>
  41.         {

  42.                 @Override
  43.                 public int compare(Student o1, Student o2) {
  44.                         return o2.sc-o1.sc;
  45.                 }       
  46.         }
  47.         void show()
  48.         {
  49.                 System.out.println("座號\t姓名\t分數");
  50.                 System.out.println("-------------------");
  51.                 for(int i=0; i<stu.size(); i++)
  52.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).sc);
  53.                 System.out.println();                                                                                                                                                              
  54.         }
  55.         public static void main(String[] args) {
  56.                 new Ch01();
  57.         }
  58. }
複製代碼

作者: 劉愷鈞    時間: 2022-11-25 20:38

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class Ch02 {
  5.         public static void main(String[] args) {
  6.                 new Ch02();
  7.         }

  8.         ArrayList<Student> stu=new ArrayList<Student>();

  9.         Ch02()
  10.         {
  11.                 stu.add(new Student(4,"大雄",60));
  12.                 stu.add(new Student(1,"小叮噹",90));
  13.                 stu.add(new Student(3,"宜靜",100));
  14.                 stu.add(new Student(2,"阿福",70));
  15.                 stu.add(new Student(5,"技安",20));
  16.                 System.out.println("原始資料:");
  17.                 show();

  18.                 System.out.println("依座號遞增排序:");
  19.                 Collections.sort(stu,new MyComperator1());
  20.                 show();

  21.                 System.out.println("依分數遞減排序:");
  22.                 Collections.sort(stu,new MyComperator2());
  23.                 show();
  24.         }
  25.         class MyComperator1 implements Comparator<Student>{
  26.                 @Override

  27.                 public int compare(Student o1,Student o2)
  28.                 {
  29.                         return o1.num-o2.num;
  30.                 }
  31.         }
  32.         class MyComperator2 implements Comparator<Student>{
  33.                 @Override

  34.                 public int compare(Student o1,Student o2)
  35.                 {
  36.                         return o2.score-o1.score;
  37.                 }
  38.         }

  39.         void show()
  40.         {
  41.                 System.out.println("座號\t姓名\t分數");
  42.                 System.out.println("-------------");
  43.                 for(int i=0;i<5;i++)
  44.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  45.                 System.out.println();
  46.         }

  47.         class Student
  48.         {
  49.                 int num,score;
  50.                 String name;
  51.                 Student(int n,String m,int s)
  52.                 {
  53.                         num=n;
  54.                         name=m;
  55.                         score=s;                       
  56.                 }
  57.         }
  58. }
複製代碼

作者: 李宇澤    時間: 2022-11-25 20:40

本帖最後由 李宇澤 於 2022-11-25 20:45 編輯
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class Ch89 {

  5.         ArrayList<Student> stu=new ArrayList<Student>();

  6.         Ch89()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));

  13.                 System.out.println("原始資料:");
  14.                 show();

  15.                 Collections.sort(stu, new MyComparator1());  

  16.                 System.out.println("依座號遞增排序:");
  17.                 show();

  18.                 Collections.sort(stu, new MyComparator2());

  19.                 System.out.println("依分數遞減排序:");
  20.                 show();
  21.         }

  22.         void show()
  23.         {
  24.                 System.out.println("座號\t姓名\t分數");
  25.                 System.out.println("-------------------");
  26.                 for(int i=0; i<stu.size(); i++)
  27.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  28.                 System.out.println();
  29.         }

  30.         class MyComparator1 implements Comparator<Student>
  31.         {
  32.                 @Override
  33.                 public int compare(Student o1, Student o2) {
  34.                         return o1.num-o2.num;
  35.                 }      
  36.         }

  37.         class MyComparator2 implements Comparator<Student>
  38.         {
  39.                 @Override
  40.                 public int compare(Student o1, Student o2) {  
  41.                         return o2.score-o1.score;
  42.                 }      
  43.         }

  44.         class Student  
  45.         {
  46.                 int num, score;
  47.                 String name;

  48.                 Student(int n, String m, int s)
  49.                 {
  50.                         num=n;
  51.                         name=m;
  52.                         score=s;
  53.                 }
  54.         }

  55.         public static void main(String[] args) {
  56.                 new Ch89();
  57.         }
  58. }
複製代碼

作者: 林祐霆    時間: 2022-11-25 20:42

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class SUS {

  5.         ArrayList<Student> stu=new ArrayList<Student>();

  6.         SUS()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));

  13.                 System.out.println("原始資料:");
  14.                 show();

  15.                 Collections.sort(stu, new C1());

  16.                 System.out.println("依座號遞增排序:");
  17.                 show();

  18.                 Collections.sort(stu, new C2());

  19.                 System.out.println("依分數遞減排序:");
  20.                 show();
  21.         }

  22.         void show()
  23.         {
  24.                 System.out.println("座號\t姓名\t分數");
  25.                 System.out.println("-------------------");
  26.                 for(int i=0; i<stu.size(); i++)
  27.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  28.                 System.out.println();
  29.         }

  30.         class C1 implements Comparator<Student>
  31.         {
  32.                 @Override
  33.                 public int compare(Student o1, Student o2) {
  34.                         return o1.num-o2.num;
  35.                 }      
  36.         }

  37.         class C2 implements Comparator<Student>
  38.         {
  39.                 @Override
  40.                 public int compare(Student o1, Student o2) {
  41.                         return o2.score-o1.score;
  42.                 }      
  43.         }

  44.         class Student
  45.         {
  46.                 int num, score;
  47.                 String name;

  48.                 Student(int n, String m, int s)
  49.                 {
  50.                         num=n;
  51.                         name=m;
  52.                         score=s;
  53.                 }
  54.         }

  55.         public static void main(String[] args) {
  56.                 new SUS();
  57.         }
  58. }
複製代碼

作者: 蘇韋誠    時間: 2022-11-25 20:45

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.Comparator;

  6. public class ha {
  7.         ArrayList<Student> stu=new ArrayList<ha.Student>();
  8.         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  9.         ha()
  10.         {
  11.                 stu.add(new Student(4, "大雄", 60));
  12.                 stu.add(new Student(1, "小叮噹", 90));
  13.                 stu.add(new Student(3, "宜靜", 100));
  14.                 stu.add(new Student(2, "阿福", 70));
  15.                 stu.add(new Student(5, "技安", 20));

  16.                 System.out.println("原始資料:");
  17.                 show();
  18.                 Collections.sort(stu, new MyComparator1());
  19.                 System.out.println("依座號遞增排序:");
  20.                 show();
  21.                 Collections.sort(stu, new MyComparator2());
  22.                 System.out.println("依座號遞減排序:");
  23.                 show();
  24.         }

  25.         class MyComparator1 implements Comparator<Student>
  26.         {
  27.                 public int compare(Student o1,Student o2)
  28.                 {
  29.                         return o1.num-o2.num;
  30.                 }
  31.         }
  32.         class MyComparator2 implements Comparator<Student>
  33.         {
  34.                 public int compare(Student o1,Student o2)
  35.                 {
  36.                         return o2.score-o1.score;
  37.                 }
  38.         }

  39.         void show()
  40.         {
  41.                 System.out.println("座號\t姓名\t分數");
  42.                 System.out.println("------------------------");
  43.                 for(Student s:stu)
  44.                 {
  45.                         System.out.println(s.num+"\t"+s.name+"\t"+s.score);
  46.                 }
  47.                 System.out.println();
  48.         }

  49.         class Student
  50.         {
  51.                 int num, score;
  52.                 String name;

  53.                 Student(int num, String n, int s)
  54.                 {
  55.                         this.num=num;
  56.                         name=n;
  57.                         score=s;
  58.                 }
  59.         }

  60.         public static void main(String[] args) throws Exception {
  61.                 new ha();
  62.         }
  63. }
複製代碼

作者: 李穎俊    時間: 2022-11-25 20:58

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class P1 {

  5.         ArrayList<Student> stu=new ArrayList<Student>();

  6.         P1()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));

  13.                 System.out.println("原始資料:");
  14.                 show();

  15.                 Collections.sort(stu, new MyComparator1());  

  16.                 System.out.println("依座號遞增排序:");
  17.                 show();

  18.                 Collections.sort(stu, new MyComparator2());

  19.                 System.out.println("依分數遞減排序:");
  20.                 show();
  21.         }

  22.         void show()
  23.         {
  24.                 System.out.println("座號\t姓名\t分數");
  25.                 System.out.println("-------------------");
  26.                 for(int i=0; i<stu.size(); i++)
  27.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  28.                 System.out.println();
  29.         }

  30.         class MyComparator1 implements Comparator<Student>
  31.         {
  32.                 @Override
  33.                 public int compare(Student o1, Student o2) {
  34.                         return o1.num-o2.num;
  35.                 }      
  36.         }

  37.         class MyComparator2 implements Comparator<Student>
  38.         {
  39.                 @Override
  40.                 public int compare(Student o1, Student o2) {  
  41.                         return o2.score-o1.score;
  42.                 }      
  43.         }

  44.         class Student
  45.         {
  46.                 int num, score;
  47.                 String name;

  48.                 Student(int n, String m, int s)
  49.                 {
  50.                         num=n;
  51.                         name=m;
  52.                         score=s;
  53.                 }
  54.         }

  55.         public static void main(String[] args) {
  56.                 new P1();
  57.         }
  58. }
複製代碼

作者: 洪承廷    時間: 2022-11-25 21:03

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class A {

  5.         ArrayList<Student> stu=new ArrayList<Student>();

  6.         A()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));

  13.                 System.out.println("原始資料:");
  14.                 show();

  15.                 Collections.sort(stu, new MyComparator1());   

  16.                 System.out.println("依座號遞增排序:");
  17.                 show();

  18.                 Collections.sort(stu, new MyComparator2());

  19.                 System.out.println("依分數遞減排序:");
  20.                 show();
  21.         }

  22.         void show()
  23.         {
  24.                 System.out.println("座號\t姓名\t分數");
  25.                 System.out.println("-------------------");
  26.                 for(int i=0; i<stu.size(); i++)
  27.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  28.                 System.out.println();
  29.         }

  30.         class MyComparator1 implements Comparator<Student>
  31.         {
  32.                
  33.                 public int compare(Student o1, Student o2) {  
  34.                         return o1.num-o2.num;
  35.                 }      
  36.         }

  37.         class MyComparator2 implements Comparator<Student>
  38.         {
  39.                 @Override
  40.                 public int compare(Student o1, Student o2) {  
  41.                         return o2.score-o1.score;
  42.                 }      
  43.         }

  44.         class Student   
  45.         {
  46.                 int num, score;
  47.                 String name;

  48.                 Student(int n, String m, int s)
  49.                 {
  50.                         num=n;
  51.                         name=m;
  52.                         score=s;
  53.                 }
  54.         }

  55.         public static void main(String[] args) {
  56.                 new A();
  57.         }
  58. }
複製代碼

作者: 尤爾呈    時間: 2022-12-2 20:03

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;

  4. public class Ch01 {

  5.         ArrayList<Student> stu=new ArrayList<Student>();

  6.         Ch01()
  7.         {
  8.                 stu.add(new Student(4, "大雄", 60));
  9.                 stu.add(new Student(1, "小叮噹", 90));
  10.                 stu.add(new Student(3, "宜靜", 100));
  11.                 stu.add(new Student(2, "阿福", 70));
  12.                 stu.add(new Student(5, "技安", 20));

  13.                 System.out.println("原始資料:");
  14.                 show();

  15.                 Collections.sort(stu, new MyComparator1());   //使用自定比較器來排序

  16.                 System.out.println("依座號遞增排序:");
  17.                 show();

  18.                 Collections.sort(stu, new MyComparator2());

  19.                 System.out.println("依分數遞減排序:");
  20.                 show();
  21.         }

  22.         void show()
  23.         {
  24.                 System.out.println("座號\t姓名\t分數");
  25.                 System.out.println("-------------------");
  26.                 for(int i=0; i<stu.size(); i++)
  27.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  28.                 System.out.println();
  29.         }

  30.         class MyComparator1 implements Comparator<Student>
  31.         {
  32.                 @Override
  33.                 public int compare(Student o1, Student o2) {  
  34.                         return o1.num-o2.num;
  35.                 }      
  36.         }

  37.         class MyComparator2 implements Comparator<Student>
  38.         {
  39.                 @Override
  40.                 public int compare(Student o1, Student o2) {  
  41.                         return o2.score-o1.score;
  42.                 }      
  43.         }

  44.         class Student  
  45.         {
  46.                 int num, score;
  47.                 String name;

  48.                 Student(int n, String m, int s)
  49.                 {
  50.                         num=n;
  51.                         name=m;
  52.                         score=s;
  53.                 }
  54.         }

  55.         public static void main(String[] args) {
  56.                 new Ch01();
  57.         }
  58. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2