有没有什么方法可以在不使用Comparator或类似的情况下在java中对对象的arraylist进行排序?

时间:2016-08-18 06:55:15

标签: java loops sorting arraylist collections

有没有办法在不使用Comparator或类比的情况下在java中对对象的arraylist进行排序,我有如下所示的Student类,我需要根据他们的年龄对学生对象进行排序。是否可以排序?不使用在类

中实现Comparator或Comparable
//Class of Students
//comparable or comparator Not implemented

 public class Student  {
        private String studentname;
        private int rollno;
        private int studentage;

        public Student(int rollno, String studentname, int studentage) {
             this.rollno = rollno;
             this.studentname = studentname;
             this.studentage = studentage;
        }

        public String getStudentname() {
             return studentname;
        }
        public void setStudentname(String studentname) {
        this.studentname = studentname;
        }
        public int getRollno() {
        return rollno;
        }
        public void setRollno(int rollno) {
        this.rollno = rollno;
        }
        public int getStudentage() {
        return studentage;
        }
        public void setStudentage(int studentage) {
        this.studentage = studentage;
        }   
    }


    import java.util.*;
    public class ArrayListSorting  {

         public static void main(String args[]){

         //Array of Student Objects
           ArrayList<Student> arraylist = new ArrayList<Student>();
           arraylist.add(new Student(223, "Chaitanya", 26));
           arraylist.add(new Student(245, "Rahul", 24));
           arraylist.add(new Student(209, "Ajeet", 32));

           Collections.sort(arraylist);

           for(Student str: arraylist){
                System.out.println(str.getStudentage());
           }
         }
    }

6 个答案:

答案 0 :(得分:2)

假设您来自对此最严格的解释,那么答案仍然是,并且始终,是的。

排序算法对数据进行排序,而不用考虑他们实施的语言。因此,如果您不能使用任何偷偷摸摸的工作,那么您的练习点就是实现排序算法。似乎合理。

我不打算给你一个排序算法。但是,根据你想要的方式,你可以提供一个实用程序类(比如Java),接受一个ArrayList,并根据你选择的排序算法对它进行排序。你显然会根据学生的年龄来做这件事。

Lists.sort(yourArrayList);:会和其他任何东西一样好。

答案 1 :(得分:0)

不,如果ArrayList属于 自定义对象类型 ,那么在这种情况下,您有两种排序选项 - Comparable和{{ 1}}接口。

但是,您可以使用Comparator方法对 简单数组列表 进行排序。

答案 2 :(得分:0)

您的问题的答案是。方法如下:你可以简单地使用Selection Sort技术迭代ArrayList,就像对数组一样。

for(int i=0;i<arraylist.size()-1;i++){
    int m = i;
    for(int j=i+1;j<arraylist.size();j++){
        if(araylist.get(m).studentage > arraylist.get(j).studentage)
            m = j;
    }
    //swapping elements at position i and m
    Student temp = arraylist.get(i);
    arraylist.set(i, arraylist.get(m));
    arraylist.set(m, temp);
}

这会按照年龄的升序对Student对象进行排序。

答案 3 :(得分:0)

你说,有可能排序吗?不使用在课堂上实施Comparator或Comparable&#34;

然后,您的问题的答案是。您可以实现自定义Comparator并将其传递给此sort overload。您仍然实施Comparator,但不是您要排序的项目的成员。

有关示例,请参阅Using comparator to make custom sort

答案 4 :(得分:0)

是的,可以使用ArrayListget()方法而不是set()ComparableComparator进行排序:

public class ArrayListSortWithoutComparator {

    public static void main(String[] args) {
        ArrayList < Integer > arraylist = new ArrayList < Integer > ();

        arraylist.add(10);
        arraylist.add(5);
        arraylist.add(4);
        arraylist.add(2);

        for (int i = 0; i < arraylist.size(); i++) {
            for (int j = arraylist.size() - 1; j > i; j--) {
                if (arraylist.get(i) > arraylist.get(j)) {
                    int tmp = arraylist.get(i);
                    arraylist.set(i,arraylist.get(j));
                    arraylist.set(j,tmp);
                }
            }
        }
        for (int i : arraylist) {
            System.out.println(i);
        }
    }
}

<强>输出:

2
4
5
10

答案 5 :(得分:-2)

是的,名为

yourArray.sort();

您应该使用以下方法将阵列复制到新阵列中(如果您只想对旧阵列的数据进行排序,而旧阵列的数据不排序):

System.arraycopy(yourArray, startIndex, newArray, );

或者您可以使用

int[]newArray = Arrays.copyOf(yourArray, arrayLength);

在我的意见中,第一个解决方案更强大,因为您可以合并数组。