Java在对ArrayList使用Comparable排序时的问题
发布网友
发布时间:2023-09-11 11:21
我来回答
共4个回答
热心网友
时间:2024-12-04 23:55
T表示泛型的意思,就是编译器直到运行期间才知道具体是什么类型。编译的时候是不知道他到底是什么类型的。
你的错误应该是你在泛型的时候使用不当造成的,这里没代码所以也不好说你错在那里了,你可以看看这个地方:http://whitesock.javaeye.com/blog/185692
关于排序问题。
public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
这个只要你的排序对象实现了Comparable接口就可以了,不过通常都是和同一类比较,比如你的Student的类只要implements Comparable<Student>,这样就可以了,因为你排序是只会和Student类对象来比较的,不可能拿一个其他的类来和学生比较的。而且你定义了泛型的list也是不能装其他的类型的。
热心网友
时间:2024-12-04 23:55
那是泛型,也就是说List集合里只能存放T的实例(对象)User
u
=
new
User();List<User>
list
=
new
ArrayList<User>();list.add(u);----------------如果添加其他对象就会报错!
热心网友
时间:2024-12-04 23:56
你的错误在于用Arraylist<object>来创建的studentList,而用Collections.sort()来对这个List排序,我们知道,Collections.sort()此方法的参数应该是一个实现了Comparable接口的对象集合,而Object没有实现Comparable接口,所以程序编译都应该有问题。
解决的方法: 用List<Student> studentList = new ArrayList<Student>();声明即可
热心网友
时间:2024-12-04 23:56
一》
Comparable
强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。
接口方法:
/**
* @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。
*/
int compareTo(Object o);
假设对象User,需要按年龄排序:
public class User {
private String id;
private int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
改造后的对象:
import java.util.Arrays;
public class User implements Comparable {
private String id;
private int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int compareTo(Object o) {
return this.age - ((User) o).getAge();
}
/**
* 测试方法
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 30), new User("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
二》
List是接口,List特性就是有序,会确保以一定的顺序保存元素.
ArrayList是它的实现类,是一个用数组实现的List.
List<T> list
<T>这个是泛型,意思是List里装的是哪种对象
可以不写泛型,eclipse会提示*的警告
这不是错误~
指定泛型后List不需要转型了~