java集合升序降顺序序,Java 集合排序---常用的2种排序方式、附代码实例(大师兄亲测)...

Java API针对集合类型排序提供了两种支持:

java.util.Collections.sort(java.util.List)

java.util.Collections.sort(java.util.List, java.util.Comparator)

第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。

第二个方法要求实现一个java.util.Comparator接口。

下面给出测试代码,然后代码的概述如下:(不要看到一百多行代码,就给你吓跑啦哈。大师兄辛辛苦苦测试的呢)

主要是给

(1.)Person类的实例集合按age和name排序,有升有降。

这个是按照第二个方法排序,单独实现一个比较器,然后调用Collections.sort()排序

(2.)Car类的实例集合按price排序,升序排列。

然后,实现代码如下:

import com.google.common.collect.Lists;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

/**

* Created by lxk on 2016/8/31

*/

class Person {

private int age;

private String name;

Person(int age, String name) {

this.age = age;

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Person{" +

"age=" + age +

", name='" + name + '\'' +

'}';

}

}

class PersonByAge implements Comparator {

@Override

public int compare(Person o1, Person o2) {

//这可以修改来升序或者降序

//return o2.getAge() - o1.getAge();//降序

return o1.getAge() - o2.getAge();//升序

}

}

class PersonByName implements Comparator {

@Override

public int compare(Person o1, Person o2) {

//这可以修改来升序或者降序

//return o2.getName().compareTo(o1.getName());//降序

return o1.getName().compareTo(o2.getName());//升序

}

}

class Car implements Comparable {

private String sign;

private int price;

public Car(String sign, int price) {

this.sign = sign;

this.price = price;

}

public String getSign() {

return sign;

}

public void setSign(String sign) {

this.sign = sign;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

@Override

public int compareTo(Car o) {

//同理也可以根据sign属性排序,就不举例啦。

return this.getPrice() - o.getPrice();

}

@Override

public String toString() {

return "Car{" +

"sign='" + sign + '\'' +

", price=" + price +

'}';

}

}

class Cmshome {

public static void main(String[] args) {

System.out.println("Person 集合:第二个方法要求实现一个java.util.Comparator接口。");

Person p1 = new Person(11, "adf");

Person p2 = new Person(99, "ggf");

Person p3 = new Person(21, "444");

Person p4 = new Person(15, "yrf");

//集合初始化的时候,若大小可知,应初始化固定大小的集合,也是个好习惯。

List persons = Lists.newArrayListWithCapacity(4);

persons.add(p1);

persons.add(p2);

persons.add(p3);

persons.add(p4);

//注释是因为这个产生的列表有序啦。

//代码里面有很多的空行是为了把不同功能的代码段分开,良好的编码习惯。

// 写完代码记得格式化一下,也是习惯。

//每个方法每个类都得带Java doc文档注释也是好习惯,当然我就不加了,提醒一下读者的你。

//for (int i = 0; i < 4; i++) {

// persons.add(new Person(i, "cms" + i));

//}

System.out.println("persons原来的默认顺序如下:");

for (Person p : persons) {

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

}

System.out.println("------下面按 age int 类型排序-----升序-------");

Comparator ascComparatorByAge = new PersonByAge();

Collections.sort(persons, ascComparatorByAge);

for (Person p : persons) {

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

}

System.out.println("-------下面按 name string类型排序----Java升序-------");

Comparator ascComparatorByName = new PersonByName();

Collections.sort(persons, ascComparatorByName);

for (Person p : persons) {

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

}

System.out.println("Car 集合:第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。");

Car car1 = new Car("ben", 1000);

Car car2 = new Car("qqq", 1);

Car car3 = new Car("bmw", 10000);

Car car4 = new Car("wow", 100);

List cars = Lists.newArrayListWithCapacity(4);

cars.add(car1);

cars.add(car2);

cars.add(car3);

cars.add(car4);

System.out.println("cars原来的默认顺序如下:");

for (Car car : cars) {

System.out.println(car.toString());

}

System.out.println("------下面按 price int 类型排序--升序----------");

Collections.sort(cars);

for (Car car : cars) {

System.out.println(car.toString());

}

}

}

然后是上述代码的执行结果,如下:

//测试结果如下:

"C:\Program Files\Java\jdk1.8.0_73\bin\java"

Person 集合:第二个方法要求实现一个java.util.Comparator接口。

persons原来的默认顺序如下:

Person{age=11, name='adf'}

Person{age=99, name='ggf'}

Person{age=21, name='444'}

Person{age=15, name='yrf'}

------下面按 age int 类型排序-----升序-------

Person{age=11, name='adf'}

Person{age=15, name='yrf'}

Person{age=21, name='444'}

Person{age=99, name='ggf'}

-------下面按 name string类型排序----Java升序-------

Person{age=21, name='444'}

Person{age=11, name='adf'}

Person{age=99, name='ggf'}

Person{age=15, name='yrf'}

Car 集合:第一个方法要求所排序的元素类必须实现java.lang.Comparable接口。

cars原来的默认顺序如下:

Car{sign='ben', price=1000}

Car{sign='qqq', price=1}

Car{sign='bmw', price=10000}

Car{sign='wow', price=100}

------下面按 price int 类型排序--升序----------

Car{sign='qqq', price=1}

Car{sign='wow', price=100}

Car{sign='ben', price=1000}

Car{sign='bmw', price=10000}

Process finished with exit code 0

再然后就是若要是按照字母表去排序的话可以参考如下链接:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值