在java中,有没有任何方法可以在不使用Comparator或comparable的情况下对对象的arraylist进行排序?
在java中是否有任何方法可以在不使用Comparator或comparable的情况下对对象的arraylist进行排序,我有如下所示的学生类我需要根据学生的年龄对他们的对象进行排序,是否可以进行排序?无需在类中使用实现比较器或Comparable在java中,有没有任何方法可以在不使用Comparator或comparable的情况下对对象的arraylist进行排序?,java,loops,sorting,arraylist,collections,Java,Loops,Sorting,Arraylist,Collections,在java中是否有任何方法可以在不使用Comparator或comparable的情况下对对象的arraylist进行排序,我有如下所示的学生类我需要根据学生的年龄对他们的对象进行排序,是否可以进行排序?无需在类中使用实现比较器或Comparable //Class of Students //comparable or comparator Not implemented public class Student { private String studentname;
//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());
}
}
}
//学生的班级
//未实现可比比较器
公立班学生{
私有字符串studentname;
私家车;
私立国际学校;
公立学生(int-rollno、String-studentname、int-studentage){
this.rollno=rollno;
this.studentname=studentname;
this.studentage=studentage;
}
公共字符串getStudentname(){
返回学生姓名;
}
public void setStudentname(字符串studentname){
this.studentname=studentname;
}
public int getRollno(){
返回rollno;
}
公共void setRollno(int rollno){
this.rollno=rollno;
}
公共int getStudentage(){
返校;
}
公共学生公寓(国际学生公寓){
this.studentage=studentage;
}
}
导入java.util.*;
公共类ArrayList排序{
公共静态void main(字符串参数[]){
//学生对象数组
ArrayList ArrayList=新的ArrayList();
arraylist.add(新学生(223,“Chaitanya”,26));
arraylist.add(新学生(245,“Rahul”,24));
arraylist.add(新生(209,“Ajeet”,32));
Collections.sort(arraylist);
for(学生str:arraylist){
System.out.println(str.getStudentage());
}
}
}
否,如果ArrayList
为自定义对象类型,则在这种情况下,您有两个排序选项-可比
和比较器
接口
但是,您可以使用
Collections.sort()
方法对简单数组列表进行排序假设您对此进行了最严格的解释,那么答案仍然是肯定的
排序算法对数据进行排序,而不考虑它们的实现语言。因此,如果你不能使用任何偷偷摸摸的方法,那么你练习的重点就是实现一个排序算法。看起来很合理
我不会给你一个排序算法。但是,根据您想要进行的方式,您可以提供一个实用程序类(就像Java一样),接受ArrayList
,并使用您选择的排序算法对其进行排序。你显然会根据学生的年龄来做这件事
Lists.sort(yourArrayList)代码>:将和其他任何东西一样好。是的,它被调用了
yourArray.sort();
您应该使用以下方法将数组复制到新数组中(如果您只想对新数组进行排序,而旧数组的数据不进行排序):
或者你可以使用
int[]newArray = Arrays.copyOf(yourArray, arrayLength);
在我看来,第一个解决方案更强大,因为您可以合并阵列 您的问题的答案是是。方法如下:您可以简单地使用选择排序
技术来迭代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);
}
for(int i=0;i您说过,“排序有可能吗?不在类中使用实现的Comparator或Comparable?”
那么,您的问题的答案是是。您可以实现自定义比较器并将其传递给此。您仍然可以实现比较器
,但不能作为正在排序的项目类的成员
参见示例。是的,可以使用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);
}
}
}
可以使用lambda函数吗?这是使用比较器,但不编写太多代码。Collections.sort(list,(s1,s2)->s1.getStudentage().compareTo(s2.getStudentage))
你不想使用比较器的具体原因是什么?不,这是不可能的,除非你自己编写算法。你确定语句System.out.println(str);
有效吗?我不知道println()
函数将接受类型为java.lang.Object
的参数@HenningLuther你怎么能说这是不可能的,并在同一句话中说出一种可能性?@zstring在Elimmus测试编辑器上尝试过,但没有成功它是一个ArrayList
.System.arraycopy(yourArray,startIndex,newArray,endIndex);仍然没有得到它。yourArray.sort()
?从我的观点来看,这并不重要,你可以使用list.sort()和复制useList newList=(list)yourList.clone(),或者你自己实现排序,这似乎是整件事的目标。“我需要根据学生的年龄对他们的对象进行排序”:但是我想你可以把零钱留给OP练习。等一下。他们可以在上述程序中将“rollno”改为“studentage”。我还在编辑。这是冒泡排序。你能在回答中提到这一点吗?我同意你的观点,我的解决方案是气泡排序
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