赞
踩
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<Person> {
-
- @Override
- public int compare(Person o1, Person o2) {
- //这可以修改来升序或者降序
- //return o2.getAge() - o1.getAge();//降序
- return o1.getAge() - o2.getAge();//升序
- }
- }
-
- class PersonByName implements Comparator<Person> {
-
- @Override
- public int compare(Person o1, Person o2) {
- //这可以修改来升序或者降序
- //return o2.getName().compareTo(o1.getName());//降序
- return o1.getName().compareTo(o2.getName());//升序
- }
- }
-
- class Car implements Comparable<Car> {
- 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<Person> 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<Person> ascComparatorByAge = new PersonByAge();
- Collections.sort(persons, ascComparatorByAge);
- for (Person p : persons) {
- System.out.println(p.toString());
- }
-
- System.out.println("-------下面按 name string类型排序----Java升序-------");
- Comparator<Person> 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<Car> 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
再然后就是若要是按照字母表去排序的话可以参考如下链接:
还有个问题,你还不一定遇得到,但是还是建议看一下。如下链接:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。