java中如何对ArrayList中的元素进行排序

myyhml 2009-10-25 06:11:35
//创建学生对象
Student stu0 = new Student("student1", 10);
Student stu1 = new Student("student2", 30);
Student stu2 = new Student("student3", 20);
Student stu3 = new Student("student4", 50);
Student stu4 = new Student("student5", 40);
Student stu5 = new Student("student6", 22);
// 集合对象
List list = new ArrayList();
// 添加元素
list.add(stu0);
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
//创建学生对象时参数列表中的第一个参数为"姓名",第二个参数为:“年龄”
现在问题是我想通过学生“年龄”进行升序排序。请朋友们帮我看下怎么排?
...全文
2150 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
还是用camperable
myyhml 2009-10-26
  • 打赏
  • 举报
回复
To:r4141496091
这个方法也可行,不过后来我通过实现comparator接口也实现了按学生年龄排序的功能。呵呵!谢谢了,这位朋友。
myyhml 2009-10-26
  • 打赏
  • 举报
回复
To:littlemonster
如果让要比较的类实现了comparator接口就可以用srot()方法进行排序了。呵呵!可行,谢了。
myyhml 2009-10-26
  • 打赏
  • 举报
回复
To:yuzi13631138780
这个方法可行,呵呵,谢了!
zl3450341 2009-10-26
  • 打赏
  • 举报
回复
sort()方法
happyer_longlong 2009-10-25
  • 打赏
  • 举报
回复
不过效率确实不怎么滴
happyer_longlong 2009-10-25
  • 打赏
  • 举报
回复
插入排序 可以先排序 然后 插入时候 遍历下 判断 位置 用链表来存储 好
littlemonster 2009-10-25
  • 打赏
  • 举报
回复
Collections.sort()不行吗?
pywepe 2009-10-25
  • 打赏
  • 举报
回复
二楼正解
lz12366007 2009-10-25
  • 打赏
  • 举报
回复
为什么csdn出现这么多的 本来用百度可以解决的问题的呢!!!
yuzi13631138780 2009-10-25
  • 打赏
  • 举报
回复
发错了..
import java.util.*;
public class TestComparable {
public static void main(String args[]){
Student s1=new Student("ru1",45);
Student s2=new Student("ru2",50) ;
Student s3=new Student("ru3",10) ;
Student s4=new Student("ru4",15) ;
Student s5=new Student("ru",50) ;
Student st[]={s1,s2,s3,s4,s5};
Arrays.sort(st);
for(Student s:st){
System.out.println(s);
}
}

}
class Student implements Comparable<Student>{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public int compareTo(Student s) {
int cha=this.age-s.age;
if(cha!=0){
return cha;
}else{
return this.name.compareTo(s.name);
}
}
/* public boolean equals(Object obj){
if(!(obj instanceof Student)) return false;
Student st=(Student)obj;
return (age==st.age&&name.equals(st.name));
}
public int hashCode(){
int result=17;
result=37*result+age;
result=37*result+name.hashCode();
return result;

}*/
public String toString(){
return "name:"+name+" age:"+age;
}
}
yuzi13631138780 2009-10-25
  • 打赏
  • 举报
回复
import java.lang.Comparable;
public class TestComparable implements Comparable<TestComparable>{
private int age;
private String name;
public TestComparable(int age,String name){
this.age=age;
this.name=name;
}
public int compareTo(TestComparable t){
int cha=this.age-t.age;
if(cha!=0) return cha;
else return this.name.compareTo(t.name);
}
/* public boolean equals(Object obj){
if(!(obj instanceof TestComparable)) return false;
TestComparable tc=(TestComparable)obj;
return (age==tc.age&&name.equals(tc.name));
}
public int hashCode(){
int result=17;
result=37*result+age;
result=37*result+name.hashCode();
return result;
}*/
}
r4141496091 2009-10-25
  • 打赏
  • 举报
回复
上面说错了,是插入排序,呵呵
r4141496091 2009-10-25
  • 打赏
  • 举报
回复
我没用arraylist,我用了快速排序,你看看,还可以用其他排序,如果你确实要用arraylist的话你跟我说,其实可以用arraylist的客户化排序.我的qq:414149609





public class Sort_student {
public static void main(String[] args) {
Student[] sts=new Student[]{new Student("student1", 10), new Student("student2", 30), new Student("student3", 20)
,new Student("student4", 50), new Student("student5", 40), new Student("student6", 22)};
sort(sts);
for (int i = 0; i < sts.length; i++) {
System.out.println("name: "+sts[i].name+" age:"+sts[i].age);
}

}

static void sort(Student []sts){ //快速排序算法
int prio=sts[0].age;
Student temp;
int i=1;
int j=0;

for(i=1;i<sts.length;i++) {
if(prio>sts[i].age&&i<sts.length){ //交换后a[i]是一个大数,a[i-1]是一个小数
temp=sts[i];
sts[i]=sts[i-1];
sts[i-1]=temp;
for(j=0;i-2-j>=0&&sts[i-2-j].age>sts[i-1-j].age;++j){
temp=sts[i-2-j]; //交换,并且记录向后移
sts[i-2-j]=sts[i-j-1];
sts[i-1-j]=temp;
}
prio=sts[i-1].age;
j=0;
} //若a[i-1]小于a[i]则跳出
prio=sts[i].age;
}
}
}
caodufei 2009-10-25
  • 打赏
  • 举报
回复
呵呵
caodufei 2009-10-25
  • 打赏
  • 举报
回复
看看就走iu
AldisZhan 2009-10-25
  • 打赏
  • 举报
回复

sort
public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺
序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素
都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出
ClassCastException)。
此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。

指定列表必须是可修改的,但不必是大小可调整的。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则
忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排
序,在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生
的 n2 log(n) 性能。


参数:
list - 要排序的列表。
抛出:
ClassCastException - 如果列表包含不可相互比较 的元素(例如,字符串和整数)。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparable

--------------------------------------------------------------------------------

sort
public static <T> void sort(List<T> list,
Comparator<? super T> c)根据指定比较器产生的顺序对指定列表进行
排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意 e1 和 e2 元
素,c.compare(e1, e2) 不得抛出 ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。

排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽
略合并)。此算法提供可保证的 n log(n) 性能。 指定列表必须是可修改的,但不必是可大小调整的。此实
现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避
免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。

参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
抛出:
ClassCastException - 如果列表中包含不可使用指定比较器相互比较 的元素。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparator

a1520708 2009-10-25
  • 打赏
  • 举报
回复
1.Student的类实现Comparable 接口的compareTo方法
2.用util包下的Collections类的类方法 sort(List list); 来排序

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧