[英]Sorting with comparable (Java)
我已经实现了可比较的接口和方法compareTo()。 我有一个名为randomHumans的列表,其中包含10个对象。 5个具有三个字段的对象:开始学习的姓名,年龄和年份; 5个具有两个字段的对象:姓名和年龄。 我想对列表进行排序,并尝试使用:
Collections.sort(randomHumans);
这给了我以下错误信息:
The method sort(List<T>) in the type Collections is not applicable for the arguments (ArrayList<Object>)
然后,我尝试了以下代码:
Collections.sort((List<T>) randomObjects);
但这只是给我两个新的错误消息。 也许我需要指定应该对它排序的字段,但是我找不到如何实现它。 任何帮助将不胜感激。
main
方法:
public static void main (String[] args) {
ArrayList<Object> randomObjects = new ArrayList<Object>();
for (int j=0; j<5; j++) {
Fysiker randomFysiker = new Fysiker();
randomObjects.add(randomFysiker);
Human randomHuman = new Human();
randomObjects.add(randomHuman);
}
System.out.println(randomObjects.toString());
//Collections.sort(randomObjects);
}
Human
:
class Human implements Comparable<Human> {
int age;
String name;
public Human (int myAge, String myName) {
name = myName;
age = myAge;
}
public Human() {
this(randomAge(),randomName());
}
public int compareTo(Human o) {
return this.age - o.age;
}
protected static int randomAge() {
Random randomGenerator = new Random();
return randomGenerator.nextInt(100);
}
protected static String randomName() {
Random randomGenerator = new Random();
return "Name"+randomGenerator.nextInt(15);
}
public int getAge(){
return age;
}
public String getName() {
return name;
}
public String toString() {
return "\nName: " + name + "\nAge: " + age + " yrs old\n";
}
}
Fysiker
类别:
public class Fysiker extends Human {
int year;
public Fysiker(int myAge2, String myName2, int myYear) {
name = myName2;
year = myYear+1932;
if (myAge2 >= 15+(2017-myYear)) {
age = myAge2;
} else {
age = 15+(2017-year);
}
}
public Fysiker() {
this(randomAge(),randomName(), randomYear());
}
protected static int randomYear() {
Random randomGenerator = new Random();
return randomGenerator.nextInt(83);
}
public int getYear(){
return year;
}
public String toString() {
return "\nName: " + name + "\nAge: " + age + " yrs old" + "\nStarted Physics: " + year+"\n";
}
}
只需将通用参数从Object
更改为Human
public static void main (String[] args) {
List<Human> randomObjects = new ArrayList<>();
for (int j = 0; j < 5; j++) {
Fysiker randomFysiker = new Fysiker();
randomObjects.add(randomFysiker);
Human randomHuman = new Human();
randomObjects.add(randomHuman);
}
System.out.println(randomObjects);
Collections.sort(randomObjects);
}
当您编写Collections.sort(randomHumans);
randomHumans
必须是可比较列表。 如果“被迫”使用对象列表,则必须提供一个Comparator
以说明如何比较每个对象:
Collections.sort(randomHumans, humanComparator);
所有这些在官方文档中都有说明:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.