黑马程序员技术交流社区

标题: 请教大神们一道关于ArrayList的题 [打印本页]

作者: Hi刘腾    时间: 2016-1-1 23:18
标题: 请教大神们一道关于ArrayList的题
已知User类,该类有name(String类型)和age(int类型)两个属性,请编写代码实现给ArrayList<User>排序,要求按照User对象的age的倒序排序。

在排序的地方卡住了,求大神们的指点
小弟先谢了!
作者: 1158147908    时间: 2016-1-1 23:59
重写compare方法呀
作者: 1158147908    时间: 2016-1-2 00:00
可以在usr类中重写,或者是在比较的时候new一个比较器
作者: 魏志林    时间: 2016-1-2 10:53
要排序,那么排序的代码自己要写,Arraylist集合里面没有这个功能
作者: 魏志林    时间: 2016-1-2 10:59
本帖最后由 魏志林 于 2016-1-2 11:00 编辑

public class Test {

        /**
         *
已知User类,该类有name(String类型)和age(int类型)两个属性
,请编写代码实现给ArrayList<User>排序,要求按照User对象的age的倒序排序
         */
        public static void main(String[] args) {
                ArrayList<User> al=new ArrayList<>();
                al.add(new User("zhangsan", 15));
                al.add(new User("qinshunh", 20));
                al.add(new User("wo", 28));
                al.add(new User("tanang", 26));
                al.add(new User("xiaom", 27));
                sortUser(al);
                for(Iterator<User> it=al.iterator();it.hasNext();){
                        System.out.println(it.next());
                }
        }
        public static void sortUser(ArrayList<User> al){
                for(int i=0;i<al.size()-1;i++){
                        for(int j=i+1;j<al.size();j++){
                                if(al.get(i).age>al.get(j).age){
                                        int temp=al.get(i).age;
                                        al.get(i).age=al.get(j).age;
                                        al.get(j).age=temp;
                                }
                        }
                }
        }
}
class User{
        String name;
        int age;
        public User(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        @Override
        public String toString() {
                return "User [name=" + name + ", age=" + age + "]";
        }
}

作者: Hi刘腾    时间: 2016-1-2 23:04
魏志林 发表于 2016-1-2 10:59
public class Test {

        /**

我运行了一下,这个是把age属性排序了。
int temp=al.get(i).age;
al.get(i).age=al.get(j).age;
al.get(j).age=temp;
这个仅仅把元素的age属性排序了,姓名个年龄对不上了。这个名字应该也是跟着变的
运行前:
al.add(new User("zhangsan", 15));
al.add(new User("qinshunh", 20));
al.add(new User("wo", 28));
al.add(new User("tanang", 26));
al.add(new User("xiaom", 27));
运行后:
User [name=zhangsan, age=15]
User [name=qinshunh, age=20]
User [name=wo, age=26]
User [name=tanang, age=27]
User [name=xiaom, age=28]
作者: 黑夜中那颗星    时间: 2016-1-3 15:14
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. public class Test {
  4.         public static void main(String[] args) {
  5.                 ArrayList<User> al = new ArrayList<User>();
  6.                 al.add(new User("zhangsan",30));
  7.                 al.add(new User("lisi",20));
  8.                 al.add(new User("wangwu",60));
  9.                 System.out.println("--------排序前---------");
  10.                 printList(al);
  11.                 Collections.sort(al);
  12.                 System.out.println("--------排序后---------");
  13.                 printList(al);
  14.         }
  15.         public static void printList(ArrayList<User> al){
  16.                 for(User u:al){
  17.                         System.out.println(u.getName()+":"+u.getAge());
  18.                 }
  19.         }

  20. }
  21. class User implements Comparable<User>{
  22.         private String name;
  23.         private int age;
  24.         public boolean equals(Object obj){
  25.                 User u = (User)obj;
  26.                 return u.getAge()==this.getAge()&&u.getName().equals(this.getName());
  27.         }
  28.         public String getName() {
  29.                 return name;
  30.         }
  31.         public void setName(String name) {
  32.                 this.name = name;
  33.         }
  34.         public int getAge() {
  35.                 return age;
  36.         }
  37.         public void setAge(int age) {
  38.                 this.age = age;
  39.         }
  40.         public User(String name, int age) {
  41.                 super();
  42.                 this.name = name;
  43.                 this.age = age;
  44.         }
  45.         public int compareTo(User o) {
  46.                 int num = new Integer(o.getAge()).compareTo(this.getAge());
  47.                 return num==0?o.getName().compareTo(this.getName()):num;
  48.         }
  49. }
复制代码

作者: Hi刘腾    时间: 2016-1-3 21:06
1158147908 发表于 2016-1-2 00:00
可以在usr类中重写,或者是在比较的时候new一个比较器

谢谢!谢谢!!记下了!
作者: Hi刘腾    时间: 2016-1-3 21:08
黑夜中那颗星 发表于 2016-1-3 15:14

非常感谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2