[java]三种自定义链表排序方式

代码:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

class Emp{
    String name;
    int age;
    
    public Emp(String name,int age) {
        this.name=name;
        this.age=age;
    }
    
    public String toString() {
        return "Emp name="+name+" age="+age;
    }
}
public class Dept {
    private List<Emp> emps;
    
    public Dept() {
        emps=new ArrayList<Emp>();
        
        emps.add(new Emp("Bill",32));
        emps.add(new Emp("Cindy",42));
        emps.add(new Emp("Cindy",12));
        emps.add(new Emp("Cindy",52));
        emps.add(new Emp("Douglas",92));
        emps.add(new Emp("Andy",22));
    }
    
    public void printEmps() {
        for(Emp emp:emps) {
            System.out.println(emp);
        }
    }
    
    /**
     * Sort by age
     */
    public void sort1() {
        emps.sort(new Comparator<Emp>() {
           public int compare(Emp a1, Emp a2){
            return a1.age-a2.age;
          }
        });
    }
    
    /**
     * Sort by name
     */
    public void sort2() {
        emps.sort((Emp a1, Emp a2)->a1.name.compareTo(a2.name));
    }
    
    /**
     * Sort by name,if same name,sort by age
     */
    public void sort3() {
        emps.sort(new Comparator<Emp>() {
           public int compare(Emp a1, Emp a2){
              int result=a1.name.compareTo(a2.name);
              
              if(result==0) {
                  return a1.age-a2.age;
              }else {
                  return result;
              }
          }
        });
    }
    
    public static void main(String[] args) {
        Dept dept=new Dept();
        dept.sort1();
        dept.printEmps();
        
        System.out.println("--------------");
        dept.sort2();
        dept.printEmps();
        
        System.out.println("--------------");
        dept.sort3();
        dept.printEmps();
    }
}

输出:

Emp name=Cindy age=12
Emp name=Andy age=22
Emp name=Bill age=32
Emp name=Cindy age=42
Emp name=Cindy age=52
Emp name=Douglas age=92
--------------
Emp name=Andy age=22
Emp name=Bill age=32
Emp name=Cindy age=12
Emp name=Cindy age=42
Emp name=Cindy age=52
Emp name=Douglas age=92
--------------
Emp name=Andy age=22
Emp name=Bill age=32
Emp name=Cindy age=12
Emp name=Cindy age=42
Emp name=Cindy age=52
Emp name=Douglas age=92

--END-- 2019.11.06

posted @ 2019-11-06 10:13  逆火狂飙  阅读(685)  评论(0编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东