选择使用ArrayLists排序

时间:2014-02-21 13:27:20

标签: java sorting arraylist

我的主类中有一个学生的数组列表,名为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){
            }

2 个答案:

答案 0 :(得分:1)

  1. 致电Collections.sort(yourStudentList);
  2. 您的学生班必须实施Comparable接口
  3. 覆盖接口的comparteTo()方法。
  4. 就是这样!

    比较器的示例(假设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
    

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

答案 1 :(得分: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(学生,新的StudentComparator());