2014-02-21 3 views
-2

У меня есть список классов студентов в моем основном классе под названием S ... объектов типа student. В «s» мне нужно отсортировать мои ученики в моем списке «S» в списке по номеру регистрации, который меньше, чем выше.Выбор Сортировка с ArrayLists

Я перепробовал много способов, но не может заставить его работать ...

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){ 
      } 
+0

Пользовательский компаратор? – VinayVeluri

+0

Каким образом вы пытались и не работали? Вы использовали для этого Arrays.sort()? – Slimu

+0

Пожалуйста, покажите, что вы пробовали? –

ответ

1
  1. Вызов Collections.sort(yourStudentList);
  2. Ваш студент класс должен реализовать интерфейс Сопоставимые
  3. Override 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 

EDIT Если вам нужно использовать сортировку выбор, чем вам нужен этот компаратор тоже и интерфейс compareable. Но тогда у вас есть только так созданная функция sort(), которая реализует алгоритм выбора.

+0

Альтернативно вы можете реализовать отдельный 'Comparator' по номеру регистрации. – AlexR

+0

Мне нужно использовать алгоритм, а не тот, который уже есть в Java: / – user3029345

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());

Смежные вопросы