java集合排序总结

Java集合排序最常用的实现方式有两种,面试中也是被经常问到的两种实现方式区别,自己也是写了个小例子来加深一下理解,先说一下这种排序:
  1. Comparable
    在集合内部定义的方法实现排序,需要排序的类实现该接口,内部实现compareto方法,这个方法我们经常比较String的时候会用到,那是因为String本身就实现了Comparable接口。这种比较方法适用于某一类的固定比较,比较学生的分数,就经常会用来作比较,使用也比较简单,直接Collectios.sort(list)即可。
  2. Comparator
    在集合外部实现的排序,也就是说需要比较的实体类不用做任何变化,单独新建一个比较类,实现Comparator接口,使用的时候直接list.sort(定义的类),即可,还比如说学生,除了分数排序外,难免会用姓名,年龄排序,这样的话Comparable就实现不了,那就可以新建一个外部的比较类。

两种排序方法具体还是要根据实际需要来选取,写了个小例子来加深自己的理解,也方便以后面试的时候能比较按照自己的理解回答

package com.zhh.ListDemo;

public class Student implements Comparable<Student> {

public Student(){

}

public Student(String name,int age,int score){
    this.name=name;
    this.age=age;
    this.score=score;
}

private String name;

private int age;

private int score;

public int compareTo(Student stu) {

    return stu.age-this.age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public int getScore() {
    return score;
}

public void setScore(int score) {
    this.score = score;
}

@Override
public String toString() {
    return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}

}
package com.zhh.ListDemo;

import java.util.Comparator;

public class StudenScoreComparator implements Comparator<Student> {

public int compare(Student stu1, Student stu2) {
    return stu1.getScore()-stu2.getScore();
}

}
package com.zhh.ListDemo;

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

public class ListOrderDemo {

public static void main(String[] args) {
    List<Student> list = new ArrayList<Student>();

    Student stu1 = new Student("stu1",1,3);
    Student stu2 = new Student("stu2",3,1);
    Student stu3 = new Student("stu2",2,5);
    list.add(stu3);
    list.add(stu1);
    list.add(stu2);

    System.out.println(list);
    Collections.sort(list);
    System.out.println(list);
    list.sort(new StudenScoreComparator());
    System.out.println(list);
}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值