【问题标题】:Selection Sorting with ArrayLists使用 ArrayLists 进行选择排序
【发布时间】:2014-02-21 13:27:19
【问题描述】:

我的主类 S... 中有一个学生数组列表,对象类型为学生。在“s”中,我需要通过他们拥有的registrationNumber对我的arrayList“S”中的学生进行排序,从小到大。

我尝试了很多方法,但无法让它发挥作用......

public static void sort(){
            int small;
            for (int i=0; i < s.size() -1;i++){
            small = i;
                for (int ind = i + 1; ind< s.size(); ind++ ){
                if( stud.get(ind).getRegNum() < s.get(small).getRegNum() ){
                    small = ind;
                    swap(i, small);
                }
            }
          }
       }

      public static void swap(int one,int two){
            }

【问题讨论】:

  • 您尝试了哪些方法但没有成功?你为此使用了 Arrays.sort() 吗?
  • 请展示您尝试过的内容?
  • 这就是我尝试过的...我不知道要在交换中放入什么,但我也不确定 void sort() 是否正确

标签: java sorting arraylist


【解决方案1】:

您应该查看 java 集合。 见http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

我假设你的学生班级有一个公共变量registrationNumber

public class StudentComparator implements Comparator<Student>{

    @Override
    public int compare(Student o1, Student o2) {
        return (o1.registrationNumber>o2.registrationNumber);
    }
} 

某处呼叫: Collections.sort(students, new StudentComparator ());

【讨论】:

    【解决方案2】:
    1. 致电Collections.sort(yourStudentList);
    2. 您的学生班级必须实现接口 Comparable
    3. 重写接口的comparteTo() 方法。

    就是这样!

    比较器示例(假设registrationNumber 是一个整数):

        @Override
        public int compareTo(Student o) {
            if(null== o)
                return 1;   
            if(registrationNumber == 0 && o.registrationNumber==0)
                return 0;
            if(registrationNumber == 0 && o.registrationNumber!=0)
                return -1;
            if(registrationNumber != 0 && o.registrationNumber==0)
                return 1;
            return o.registrationNumber.compareTo(registrationNumber);
        }
    
    return 1 //when o is less than this
    return -1 //when o is bigger than this
    return 0 //when they are equal
    

    编辑如果你需要使用选择排序,那么你也需要这个比较器和可比较的接口。但是你只需要创建一个自定义的sort() 函数来实现选择排序算法。

    【讨论】:

    • 另外,您可以通过注册号实现单独的Comparator
    • 我需要使用一种算法,而不是 Java 中已有的算法:/
    猜你喜欢
    • 2015-05-19
    • 2021-03-09
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多