有没有什么方法可以在不使用比较器或比较器的情况下对java中的对象数组列表进行排序?

问题描述 投票:0回答:7

有没有什么方法可以在不使用比较器或比较器的情况下对java中的对象数组列表进行排序,我有如下所示的学生类,我需要根据学生的年龄对学生对象进行排序。,是否可以排序?无需在类中使用实现 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());
           }
         }
    }
java loops sorting arraylist collections
7个回答
2
投票

假设您对此有最严格的解释,那么答案仍然是,并且总是,是的。

排序算法对数据进行排序,而不关心它们实现的语言。因此,如果您不能使用任何偷偷摸摸的解决方案,那么您练习的重点就是实现排序算法。看起来很合理。

我不会给你排序算法。但是,根据您想要的方式,您可以提供一个实用程序类(就像 Java 那样),接受

ArrayList
,并使用您选择的排序算法对其进行排序。显然,您会根据学生的年龄来这样做。

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


1
投票

是的,可以使用

ArrayList
get()
方法而不是
set()
Comparable
Comparator
进行排序:

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

0
投票

不,如果

ArrayList
自定义对象类型,那么在这种情况下,您有两种排序选项 -
Comparable
Comparator
接口。

但是您可以使用

Collections.sort()
方法对 简单数组列表进行排序。


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 对象进行排序。


0
投票

您说,“是否可以排序?而不在类中使用实现 Comparator 或 Comparable”

那么,您问题的答案是。您可以实现自定义比较器并将其传递给此排序重载。您仍然实现

Comparator
,但不是作为您正在排序的项目类的成员。

请参阅使用比较器进行自定义排序示例。


0
投票

这个问题很旧,但答案对其他人仍然有用。 使用问题中的 Student 类,您可以按年龄排序,无需 Comparable 或 Comparator。

public static void main(String[] args) {

    Student s1 = new Student(1001, "Ragnar Lodbrok", 39);
    Student s2 = new Student( 1003, "Harald Sigurdsson",33);
    Student s3 = new Student( 1005, "Uhtred Ragnarsson",48);
    Student s4 = new Student( 1006, "Alexander Skarsgård",26);

    List<Student> studentList = new ArrayList<Student>(List.of(s1,s2,s3,s4));

    sortByAge(studentList);
}




private static void sortByAge(List<Student> studentList) {
    for (int i = 0; i < studentList.size(); i++) {

        for (int j = i+1; j < studentList.size(); j++) {

            if (studentList.get(i).getStudentage() > studentList.get(j).getStudentage()) {
                Student tmp = studentList.get(i);
                studentList.set(i, studentList.get(j));
                studentList.set(j, tmp);
            }

        }
    }

    Iterator<Student> studentIterator = studentList.iterator();

    while(studentIterator.hasNext()) {
        System.out.println(studentIterator.next().toString());
    }
}

输出


-2
投票

是的,它的名字是

yourArray.sort();

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

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

或者你可以使用

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

在我看来,第一个解决方案更强大,因为您可以合并数组。

© www.soinside.com 2019 - 2024. All rights reserved.