Board logo

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

作者: tonyh    時間: 2021-6-26 15:28     標題: 自訂排序 (一)

本帖最後由 tonyh 於 2021-7-3 15:23 編輯

試定義一集合,集合中包含五個 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. }
複製代碼

作者: 蔡幸融    時間: 2021-7-3 15:21

  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<>();
  6.        
  7.         Ch01()
  8.         {
  9.                 stu.add(new Student(4, "大雄", 60));
  10.                 stu.add(new Student(1, "小叮噹", 90));
  11.                 stu.add(new Student(3, "宜靜", 100));
  12.                 stu.add(new Student(2, "阿福", 70));
  13.                 stu.add(new Student(5, "技安", 20));
  14.                
  15.                 System.out.println("原始資料: ");
  16.                 show();
  17.                
  18.                 Collections.sort(stu, new MyComparator());
  19.        
  20.                 System.out.println("依座號遞增排序: ");
  21.                 show();
  22.                
  23.                 Collections.sort(stu, new MyComparator2());
  24.                
  25.                 System.out.println("依分數遞減排序: ");
  26.                 show();
  27.         }
  28.        
  29.         void show()
  30.         {
  31.                 System.out.println("座號\t姓名\t分數");
  32.                 System.out.println("---------------------------------");
  33.                 for(int i=0; i<stu.size(); i++)
  34.                     System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  35.             System.out.println();
  36.         }
  37.        
  38.         class MyComparator implements Comparator<Student>
  39.         {
  40.                 public int compare(Student o1, Student o2)
  41.                 {
  42.                         return o1.num-o2.num;
  43.                 }
  44.         }
  45.        
  46.         class MyComparator2 implements Comparator<Student>
  47.         {
  48.                 public int compare(Student o1, Student o2)
  49.                 {
  50.                         return o2.score-o1.score;
  51.                 }
  52.         }
  53.        
  54.         class Student
  55.         {
  56.                 int num, score;
  57.                 String name;
  58.                
  59.                 Student(int n, String m, int s)
  60.                 {
  61.                         num=n;
  62.                         name=m;
  63.                         score=s;
  64.                 }
  65.         }
  66.         public static void main(String[] args) {
  67.                 new Ch01();
  68.         }

  69. }
複製代碼

作者: 陳泓瑜    時間: 2021-7-3 15:22

  1. package com.buriku.nayoni.d210703;

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

  5. public class D210703 {

  6.         ArrayList<STUDENT> stu = new ArrayList<STUDENT>();
  7.        
  8.         public D210703() {
  9.                 // TODO Auto-generated constructor stub
  10.                 stu.add(new STUDENT(4, "大雄", 60));
  11.                 stu.add(new STUDENT(1, "小叮噹", 90));
  12.                 stu.add(new STUDENT(3, "宜靜", 100));
  13.                 stu.add(new STUDENT(2, "阿福", 70));
  14.                 stu.add(new STUDENT(5, "技安", 20));
  15.                
  16.                 System.out.println("原始資料");
  17.                 show();
  18.                
  19.                 Collections.sort(stu, new COMPARATOR_NUM());
  20.                 System.out.println("依座號遞增排序");
  21.                 show();
  22.                
  23.                 Collections.sort(stu, new COMPARATOR_SCORE());
  24.                 System.out.println("依分數遞減排序");
  25.                 show();
  26.         }
  27.         public void show() {
  28.                 System.out.println("座號\t姓名\t分數");
  29.                 System.out.println("-----------------------");
  30.                 for (int i = 0; i < stu.size(); i++) {
  31.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  32.                 }
  33.                 System.out.println();
  34.         }
  35.         public class COMPARATOR_NUM implements Comparator<STUDENT>{
  36.                 @Override
  37.                 public int compare(STUDENT arg0, STUDENT arg1) {
  38.                         // TODO Auto-generated method stub
  39.                         return arg0.num - arg1.num;
  40.                 }
  41.         }
  42.         public class COMPARATOR_SCORE implements Comparator<STUDENT>{
  43.                 @Override
  44.                 public int compare(STUDENT arg0, STUDENT arg1) {
  45.                         // TODO Auto-generated method stub
  46.                         return arg1.score - arg0.score;
  47.                 }
  48.         }
  49.         public class STUDENT {        //INTERNAL CLASS
  50.                 int num, score;
  51.                 String name;
  52.                 public STUDENT(int n, String nm, int s) {
  53.                         // TODO Auto-generated constructor stub
  54.                         num = n;
  55.                         name = nm;
  56.                         score = s;
  57.                 }
  58.         }
  59.         public static void main(String[] args) {
  60.                 // TODO Auto-generated method stub
  61.                 new D210703();
  62.         }
  63. }
複製代碼

作者: 林侑成    時間: 2021-7-3 15:25

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

  7. public class Stacking {
  8.         ArrayList<Student> stu=new ArrayList<>();
  9.         Stacking()
  10.     {
  11.             stu.add(new Student(4, "A", 60));
  12.             stu.add(new Student(1, "B", 90));
  13.             stu.add(new Student(3, "C", 100));
  14.             stu.add(new Student(2, "D", 70));
  15.             stu.add(new Student(5, "E", 20));
  16.            
  17.             System.out.println("原始資料: ");
  18.             show();           
  19.             Collections.sort(stu, new MyComparator());   
  20.             System.out.println("依座號遞增排序: ");
  21.             show();           
  22.             Collections.sort(stu, new MyComparator2());           
  23.             System.out.println("依分數遞減排序: ");
  24.             show();
  25.     }
  26.    
  27.     void show()
  28.     {
  29.             System.out.println("num\tname\tscore");
  30.             System.out.println("----------------------");
  31.             for(int i=0; i<stu.size(); i++)
  32.                 System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  33.         System.out.println();
  34.     }
  35.    
  36.     class MyComparator implements Comparator<Student>
  37.     {
  38.             public int compare(Student o1, Student o2)
  39.             {
  40.                     return o1.num-o2.num;
  41.             }
  42.     }
  43.    
  44.     class MyComparator2 implements Comparator<Student>
  45.     {
  46.             public int compare(Student o1, Student o2)
  47.             {
  48.                     return o2.score-o1.score;
  49.             }
  50.     }
  51.         class Student
  52.         {
  53.                 int num, score;
  54.                 String name;
  55.                 Student(int num, String name,int score)
  56.                 {
  57.                         this.num=num;
  58.                         this.name=name;
  59.                         this.score=score;
  60.                 }
  61.         }
  62.         public static void main(String[] args) throws IOException, Exception {
  63.                 new Stacking();
  64.         }

  65. }
複製代碼

作者: 蔡依宸    時間: 2021-7-3 15:25

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

  4. public class s {
  5.        
  6.         ArrayList<Student> stu=new ArrayList<Student>();
  7.        
  8.         s()
  9.         {
  10.                 stu.add(new Student(4,"大雄",60));
  11.                 stu.add(new Student(1,"A夢",90));
  12.                 stu.add(new Student(3,"靜香",100));
  13.                 stu.add(new Student(2,"阿福",70));
  14.                 stu.add(new Student(5,"技安",20));
  15.                
  16.                 System.out.print("原始資料");
  17.                 show();
  18.                
  19.                 Collections.sort(stu, new MyC1());
  20.                 System.out.println("依座號排序:");
  21.                 show();
  22.                
  23.                 Collections.sort(stu, new MyC2());
  24.                 System.out.println("依分數排序:");
  25.                 show();
  26.         }
  27.        
  28.         void show()
  29.         {
  30.                 System.out.println("班級\t姓名\t座號");
  31.                 System.out.println("--------------------------");
  32.                 for(int i=0;i<stu.size();i++)
  33.                         System.out.println("\t"+stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  34.                 System.out.println();
  35.         }
  36.         class MyC1 implements Comparator<Student>
  37.         {
  38.                 public int  compare(Student o1,Student o2) {
  39.                         return o1.num-o2.num;
  40.                 }
  41.                     
  42.         }
  43.        
  44.         class MyC2 implements Comparator<Student>
  45.         {
  46.                 public int  compare(Student o1, Student o2) {
  47.                         return o2.score-o1.score;
  48.                 }
  49.                
  50.         }
  51.         class Student
  52.         {
  53.                 int num,score;
  54.                 String name;
  55.                
  56.                 Student(int n, String m,int s)
  57.                 {
  58.                         num=n;
  59.                         name=m;
  60.                         score=s;
  61.                 }
  62.         }

  63.         public static void main(String[] args) {
  64.                 // TODO 自動產生的方法 Stub
  65.                 new s();
  66.         }

  67. }
複製代碼

作者: 陳智鈞    時間: 2021-7-3 15:32

  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.                
  33.                 public int compare(Student o1, Student o2) {  
  34.                         return o1.num-o2.num;
  35.                 }      
  36.         }

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

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

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

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

作者: 蔡季庭    時間: 2021-7-3 15:35

  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Comparator;
  4. public class Ch01 {
  5.         ArrayList<Student> stu=new ArrayList<>();
  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.                
  16.                 Collections.sort(stu,new Mycomparator2());
  17.                 System.out.println("依座號排序:");
  18.                 show();
  19.                 Collections.sort(stu,new Mycomparator1());
  20.                 System.out.println("依座號遞減:");
  21.                 show();
  22.         }
  23.         void show()
  24.         {
  25.                 System.out.println("座號\t姓名\t分數");
  26.                 System.out.println("--------------------");
  27.                 for(int i=0;i<stu.size();i++)
  28.                         System.out.println(stu.get(i).num+"\t"+stu.get(i).name+"\t"+stu.get(i).score);
  29.                 System.out.println();
  30.         }
  31.         class Mycomparator2 implements Comparator<Student>
  32.         {
  33.                 public int compare(Student o1,Student o2) {
  34.                         return o1.num-o2.num;
  35.                 }
  36.                 class Mycomparator1 implements Comparator<Student>
  37.                 {
  38.                         public int compare(Student o1,Student o2) {
  39.                                 return o2.num-o1.num;
  40.                         }
  41.         }
  42.         class Student
  43.         {
  44.                 int num , score;
  45.                 String name;
  46.                
  47.                 Student(int n,String m,int s)
  48.                 {
  49.                         num=n;
  50.                         name=m;
  51.                         score=s;
  52.                 }
  53.         }
  54.         public static void main(String[] args) {
  55.                 new Ch01();
  56.         }

  57. }
複製代碼

作者: 洪藜芸    時間: 2021-7-3 15:37

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

  4. public class cccc {

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

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

  13.                 System.out.println("原始資料:");
  14.                 show();
  15.                
  16.                 Collections.sort(sa, new C());
  17.                 System.out.println("依座號遞增排序:");
  18.                 show();
  19.                
  20.                 Collections.sort(sa, new C2());
  21.                 System.out.println("依分數遞減排序:");
  22.                 show();
  23.         }

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

  32.         class C implements Comparator<Student>
  33.         {
  34.                 public int compare(Student s1, Student s2)
  35.                 {
  36.                         return s1.num-s2.num;
  37.                 }
  38.         }

  39.         class C2 implements Comparator<Student>
  40.         {
  41.                 public int compare(Student s1, Student s2)
  42.                 {
  43.                         return s2.score-s1.score;
  44.                 }
  45.         }

  46.         class Student
  47.         {
  48.                 int num, score;
  49.                 String name;

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

  57.         public static void main(String[] args) throws Exception{
  58.                 new cccc();
  59.         }
  60. }
複製代碼

作者: 戴偉宸    時間: 2021-7-10 13:47

  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.                 @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 A();
  57.         }
  58. }
複製代碼





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