黑马程序员技术交流社区
标题:
Java集合的排序(sort)问题
[打印本页]
作者:
pzfpang449
时间:
2013-1-30 14:41
标题:
Java集合的排序(sort)问题
本帖最后由 张向辉 于 2013-2-2 10:40 编辑
在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。
你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递一个List对象,也可以传递一个List和一个Comparator。如果列表中的元素全都是相同类型的类,并且这个类实现了Comparable接口,你可以简单的调用 Collections.sort()。
如果这个类没有实现Comparator,如何来解决?希望高手帮忙。
顺便也秋下技术分,还差2分就可以入学考试了,希望版主给些技术分,谢谢!
作者:
黑马张英涛
时间:
2013-1-30 15:19
同时实现了自身实现Comparable和传递比较器排序的方式。
public class MyTest {
/**
*
* @param args
*/
public static void main(String[] args) {
Student s1=new Student("abc",77);
Student s2=new Student("bdc",65);
Student s3=new Student("abe",65);
Student s4=new Student("cac",90);
List<Student> list=new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
for(Student s : list){ //存入集合的顺序
System.out.println(s.name+":"+s.score);
}
System.out.println("=============================");
Collections.sort(list); //使用对象自身的排序方式
for(Student s : list){
System.out.println(s.name+":"+s.score);
}
System.out.println("=============================");
Collections.sort(list, new MyComparator()); //按照比较器指定的方式排序
for(Student s : list){
System.out.println(s.name+":"+s.score);
}
}
}
class Student implements Comparable<Student>{
public String name;
public int score;
public Student(String name,int score){
this.name=name;
this.score=score;
}
@Override
public int compareTo(Student o) {
if(this.score==o.score) //分数相等就按照名字的自然顺序
return this.name.compareTo(o.name);
else
return this.score-o.score; //按照分数的自然顺序
}
}
class MyComparator implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
if(o1.score==o2.score) //如果分数相等就按照名字比较的反序
return -o1.name.compareTo(o2.name);
else
return o2.score-o1.score; //按照分数大小的反序比较
}
}
作者:
Rancho_Gump
时间:
2013-2-2 10:38
public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
文档说的很清楚,不建议以刷分为目的而发帖!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2