A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘晓康 中级黑马   /  2012-4-1 14:56  /  1882 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//创建学生对象
  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);
  //创建学生对象时参数列表中的第一个参数为"姓名",第二个参数为:“年龄”
  现在问题是我想通过学生“年龄”进行升序排序。请朋友们帮我看下怎么排?

3 个回复

倒序浏览
第一种情况:如果你的Student类实现了Comparable借口并且是按学生年龄排序的,
     解决 :只需一句话:Conllections.sort(list);
第二种情况:如果你的Student类实现了Comparable借口,但是并没有按学生年龄排序
     解决:自定义一个类实现Comparator接口,按学生年龄排序
           Colllection.sort(new Comparator子类对象);
第三种情况:如果你的Student没有实现Comparable接口,(建议在定义Student类时,实现Comparable接口,让元素自身具备比较性)
       解决:同第二种解决
回复 使用道具 举报
本帖最后由 黑马胡林 于 2012-4-1 16:39 编辑

我把原码给写下来了:
先做个简明白的分析:定义俩个类,一个Student类, 要输出的StudentArrayList.
Student  实现了接口Comparable按年龄进行排序。StudentArrayList主要为了对list进行操作。加一个Collections.sort()即可;
这是源码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

class  Student implements Comparable {
        String  name;
        int  age;
        public  Student(String name,int age){
                this.name=name;
                this.age=age;
        }
        public String getName() {
                return name;
        }
        public int getAge() {
                return age;
        }

        @Override
     public int compareTo(Object obj) {
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student)obj;
                //System.out.println(this.name+"....compareto....."+s.name);
                if(this.age>s.age)
                        return 1;
                if(this.age==s.age)
                {
                        return this.name.compareTo(s.name);
                }
                return -1;
        }   
}

public class StudentArrayList{
        public static void main(String[] arg){
               
                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);
                Collections.sort(list);
               
                Iterator it=list.iterator();
                while(it.hasNext()){
                        Student  stu=(Student)it.next();
                       
                        System.out.println("姓名:"+stu.getName()+";年龄:"+stu.getAge());
                       
                }
        }
}

程序运行结果:
姓名:student1;年龄:10
姓名:student3;年龄:20
姓名:student6;年龄:22
姓名:student2;年龄:30
姓名:student5;年龄:40
姓名:student4;年龄:50
回复 使用道具 举报
本帖最后由 孙利川 于 2012-4-1 16:54 编辑

import java.util.*;
class Student
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}
class MyComparator implements Comparator<Student>
{
        public int compare(Student s1,Student s2)
        {
                int num = s1.getAge()-s2.getAge();
                if (num==0)
                {
                        return s1.getName().compareTo(s2.getName());
                }
                return num;
        }
}

class Test
{
        public static void main(String[] args)
        {
                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);
               
                System.out.println("排序前:");
                printList(list);
                Collections.sort(list,new MyComparator());
                System.out.println("排序后:");
                printList(list);
        }
        public static void printList(List<Student> list)
        {
                Iterator<Student> it = list.iterator();
                while (it.hasNext())
                {
                        Student s = it.next();
                        System.out.println("name="+s.getName()+"\tage="+s.getAge());
                }
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马