有没有什么办法排序java中的对象的arraylist没有使用比较器或可比较?

问题描述:

有没有什么办法排序java中的对象的arraylist没有使用比较器或类似的,我有学生类如下所示我需要根据他们的年龄排序学生对象,是否可以排序?不使用实施比较或类似的有没有什么办法排序java中的对象的arraylist没有使用比较器或可比较?

//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()); 
      } 
     } 
    } 
+0

你可以使用lambda函数?这是使用比较器,但不写许多代码。 'Collections.sort(list,(s1,s2) - > s1.getStudentage()。compareTo(s2。getStudentage));' 您不希望使用比较器的具体原因是什么? – zstring

+0

不,它是不可能的,除非你自己编程算法 –

+0

你确定'System.out.println(str);'语句有效吗?我不知道'println()'函数需要使用'java.lang.Object'类型的参数。 – progyammer

无类,如果ArrayList自定义对象类型那么在这种情况下,你有排序两种选择 - ComparableComparator接口。

但是你可以用Collections.sort()方法来排序简单的数组列表

+1

**或**你实现自我排序,这似乎是整个事情的目标。 – Fildor

+0

当然,谢谢澄清。 – DimaSan

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

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

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

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

是其所谓的

yourArray.sort(); 

您应该将阵列复制到一个新的使用(如果您在旧心不是排序的数据要排序只有newArray):

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

或者你可以使用

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

在我的意见第一个解决方案是更强大,因为你可以合并阿尔AYS。

+0

这是一个'ArrayList'。 – ChiefTwoPencils

+0

对不起,它叫: – MOC

+0

System.arraycopy(yourArray,startIndex,newArray,endIndex); – MOC

您的问题的答案是是的。具体方法如下:您可以简单地使用Selection Sort技术像ArrayList一样迭代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

“我需要根据他们的年龄**对学生对象**进行排序”:)但是我想你可以将修改留给OP的练习。 – Fildor

+0

糟糕。等一下。他们可以在上述程序中将“滚动”改为“学生”。我仍然编辑。 – progyammer

你说,“S可以排序?不用执行比较或类可比”

回答你的问题,那么,是。您可以实现自定义比较器并将其传递给此sort overload。您仍然执行Comparator,但不是您正在排序的项目类别的成员。

查看Using comparator to make custom sort为例。

是的,这是可以通过使用get()set()方法而不是ComparableComparatorArrayList排序:

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

这是泡泡分类。你能在你的答案中提到这个吗? –

+0

我同意你的观点,我的解决方案是冒泡排序 –