我已经实现了可比较的接口和方法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";
}
}
答案 0 :(得分:3)
只需将通用参数从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);
}
答案 1 :(得分:1)
撰写Collections.sort(randomHumans);
时,randomHumans
必须是可比较列表。如果你被迫&#39;要使用对象列表,您必须提供Comparator
来解释如何比较每个对象:
Collections.sort(randomHumans, humanComparator);
所有这些都在官方文件中解释过: