有没有什么办法排序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());
}
}
}
假设你来自对此的最严格的解释,那么答案仍然是,并且总是,是的。
排序算法对数据进行排序,而不用考虑它们实现的语言。因此,如果您不能使用任何偷偷摸摸的工作,那么您的练习的重点就是实现排序算法。看起来很合理。
我不打算给你一个排序算法。但是,根据你想要怎么做,你可以提供一个实用类(比如Java),接受一个ArrayList
,然后根据你选择的排序算法进行排序。你显然会根据学生的年龄来做这件事。
Lists.sort(yourArrayList);
:会和其他东西一样好。
是其所谓的
yourArray.sort();
您应该将阵列复制到一个新的使用(如果您在旧心不是排序的数据要排序只有newArray):
System.arraycopy(yourArray, startIndex, newArray,);
或者你可以使用
int[]newArray = Arrays.copyOf(yourArray, arrayLength);
在我的意见第一个解决方案是更强大,因为你可以合并阿尔AYS。
这是一个'ArrayList'。 – ChiefTwoPencils
对不起,它叫: – MOC
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对象进行排序。
“我需要根据他们的年龄**对学生对象**进行排序”:)但是我想你可以将修改留给OP的练习。 – Fildor
糟糕。等一下。他们可以在上述程序中将“滚动”改为“学生”。我仍然编辑。 – progyammer
你说,“S可以排序?不用执行比较或类可比”
回答你的问题,那么,是是。您可以实现自定义比较器并将其传递给此sort overload。您仍然执行Comparator
,但不是您正在排序的项目类别的成员。
是的,这是可以通过使用get()
和set()
方法而不是Comparable
和Comparator
到ArrayList
排序:
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
这是泡泡分类。你能在你的答案中提到这个吗? –
我同意你的观点,我的解决方案是冒泡排序 –
你可以使用lambda函数?这是使用比较器,但不写许多代码。 'Collections.sort(list,(s1,s2) - > s1.getStudentage()。compareTo(s2。getStudentage));' 您不希望使用比较器的具体原因是什么? – zstring
不,它是不可能的,除非你自己编程算法 –
你确定'System.out.println(str);'语句有效吗?我不知道'println()'函数需要使用'java.lang.Object'类型的参数。 – progyammer