有没有什么方法可以在不使用比较器或比较器的情况下对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 那样),接受
ArrayList
,并使用您选择的排序算法对其进行排序。显然,您会根据学生的年龄来这样做。
Lists.sort(yourArrayList);
:会和其他东西一样好。
是的,可以使用
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
不,如果
ArrayList
是 自定义对象类型,那么在这种情况下,您有两种排序选项 - Comparable
和 Comparator
接口。
但是您可以使用
Collections.sort()
方法对 简单数组列表进行排序。
您问题的答案是是。方法如下:您可以简单地使用
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 对象进行排序。
您说,“是否可以排序?而不在类中使用实现 Comparator 或 Comparable”
那么,您问题的答案是是。您可以实现自定义比较器并将其传递给此排序重载。您仍然实现
Comparator
,但不是作为您正在排序的项目类的成员。
请参阅使用比较器进行自定义排序示例。
这个问题很旧,但答案对其他人仍然有用。 使用问题中的 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());
}
}
是的,它的名字是
yourArray.sort();
您应该使用以下方法将数组复制到新数组中(如果您只想对新数组进行排序,而旧数组的数据不排序):
System.arraycopy(yourArray, startIndex, newArray, );
或者你可以使用
int[]newArray = Arrays.copyOf(yourArray, arrayLength);
在我看来,第一个解决方案更强大,因为您可以合并数组。