有没有办法在不使用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());
}
}
}
答案 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)
是的,可以使用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
答案 5 :(得分:-2)
是的,名为
yourArray.sort();
您应该使用以下方法将阵列复制到新阵列中(如果您只想对旧阵列的数据进行排序,而旧阵列的数据不排序):
System.arraycopy(yourArray, startIndex, newArray, );
或者您可以使用
int[]newArray = Arrays.copyOf(yourArray, arrayLength);
在我的意见中,第一个解决方案更强大,因为您可以合并数组。