java list 去重 排序_Java集合框架--List 排序

二、Java List排序(两种方法)

1. 利用Collections类的 java.util.Collections.sort(java.util.List, java.util.Comparator) 方法,自定义比较器对象对指定对象进行排序

对Person类对象按照起身高(降序)排序,当升高相同按id升序

// Person 类

class Person{

private int id;

private String name;

private float tall;

public int getId() {return id;}

public void setId(int id) {this.id = id;}

public String getName() {return name;}

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

public float getTall() {return tall;}

public void setTall(float tall) {this.tall = tall;}

}

//比较器

class PersonComparator implements Comparator{

public int compare(Person p1, Person p2 ) {

if ( p1.getTall() > p2.getTall() ) return -1;

else if ( p1.getTall() == p2.getTall() ) {

if (p1.getId() > p2.getId() ) return 1;

else if ( p1.getId() == p2.getId() ) return 0;

else return -1;

}

else return 1;

}

}

public class listSort {

public static void main(String[] args) {

// TODO Auto-generated method

Person p1 = new Person();

p1.setId(005); p1.setName("Jerry"); p1.setTall(165);

Person p2 = new Person();

p2.setId(003); p2.setName("Morty"); p2.setTall(171.1f);

Person p3 = new Person();

p3.setId(001); p3.setName("Rick"); p3.setTall(176);

Person p4 = new Person();

p4.setId(004); p4.setName("Tom"); p4.setTall(171.1f);

List list = new ArrayList<>();

list.add(p1); list.add(p4); list.add(p3); list.add(p2);

System.out.println("*****before sort*****");

for(Person ps:list)

System.out.println("id: "+ps.getId()+ " name: "+ps.getName() + " score: " + ps.getTall() );

Collections.sort(list, new PersonComparator());

System.out.println("*****after sort*****");

for(Person ps:list)

System.out.println("id: "+ps.getId()+ " name: "+ps.getName() + " score: " + ps.getTall() );

}

}

运行结果

*****before sort*****

id: 5 name: Jerry score: 165.0

id: 4 name: Tom score: 171.1

id: 1 name: Rick score: 176.0

id: 3 name: Morty score: 171.1

*****after sort*****

id: 1 name: Rick score: 176.0

id: 3 name: Morty score: 171.1

id: 4 name: Tom score: 171.1

id: 5 name: Jerry score: 165.0

2. 利用Collections类的 java.util.Collections.sort(java.util.List, java.util.Comparator) 方法,自定义比较器对象对指定对象进行排序

对一个Person类,让其按照一个Order属性进行排序,我们可以让Person类实现Comparable接口,重写其CompareTo方法即可,如:让Person按照身高属性升序排序。

class Person implements Comparable{

private String name;

private Integer tall;//compareTo只能是对象之间的比较,不能适用于int等基本类型,要使用int的封装类型Integer

public String getName() {return name;}

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

public Integer getTall() {return tall;}

public void setTall(Integer tall) {this.tall = tall;}

public int compareTo(Person ps) {//compareTo只能是对象之间的比较,不能适用于int boolean等基本类型

return this.getTall().compareTo( ps.getTall() ); //这里定义排序规则

}

}

public class listSort2 {

public static void main(String[] args) {

// TODO Auto-generated method stub

List list = new ArrayList<>();

Person p1 = new Person(); Person p2 = new Person(); Person p3 = new Person();

p1.setName("Rick"); p1.setTall(174);

p2.setName("Morty"); p2.setTall(178);

p3.setName("Jerry");p3.setTall(176);

list.add(p1);list.add(p2);list.add(p3);

//排序

Collections.sort(list);

for (Person p : list) {

System.out.println(p.getName());

}

}

}

运行结果

Rick

Jerry

Morty

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值